以下代码应在每次被调用时绘制一个正方体
错误代码:
draw=False
block_VBO=0
block_EBO=0
block_VAO=0
block_EBO_buffer_len=0
def print_blocks(sx:int,sy:int,sz:int):
global draw,block_VAO,block_EBO,block_VBO,block_EBO_buffer_len
if not draw:
block_point_buffer=[]
block_color_buffer=[]
block_EBO_buffer=[]
block_point_buffer+=x-0.5,y+0.5,z-0.5,x+0.5,y+0.5,z-0.5,x+0.5,y-0.5,z-0.5,x-0.5,y+0.5,z+0.5,x+0.5,y+0.5,z+0.5,x+0.5,y-0.5,z+0.5,x-0.5,y-0.5,z+0.5
block_EBO_buffer+=0,1,5,4,3,2,6,7,0,3,7,4,1,2,6,5,0,1,2,3,4,5,6,7
#创建VBO(顶点)
block_VBO=glGenBuffers(1)
glBindBuffer(GL_ARRAY_BUFFER,block_VBO)
a=numpy.array(block_point_buffer,dtype='float32')
glBufferData(GL_ARRAY_BUFFER,len(a)*4,a,GL_STATIC_DRAW)
#创建EBO(索引)
block_EBO=glGenBuffers(1)
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,block_EBO)
a=numpy.array(block_EBO_buffer,dtype='float32')
glBufferData(GL_ELEMENT_ARRAY_BUFFER,len(a)*4,a,GL_STATIC_DRAW)
block_EBO_buffer_len=len(a)
#创建VAO(综合)
block_VAO=glGenVertexArrays(1)
glBindVertexArray(block_VAO)
glBindBuffer(GL_ARRAY_BUFFER,block_VBO)
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,block_EBO)
glVertexPointer(3,GL_FLOAT,0,None)
glEnableClientState(GL_VERTEX_ARRAY)
glBindVertexArray(0)
draw=True
glBindVertexArray(block_VAO)
glDrawElements(GL_QUADS,block_EBO_buffer_len,GL_UNSIGNED_INT,None)
glBindVertexArray(0)
print_blocks位于渲染循环中,如果我使用glBegin和glEnd可以正常绘制,但我使用了VBO后就不会显示任何图形。我不想写着色器,我并不需要。也许是没有颜色的问题?顺便问一下我该怎么为VAO绑定颜色?