2013-12-10 43 views
0

我使用交织的VBO来使用Python和PyOpenGL显示几何图形。该VBO由顶点,法线和颜色:glVertexPointer(),glNormalPointer - PyOpenGL中的步幅和指针参数

[vx1, vy1, vz1, nx1, ny1, nz1, R1, G1, B1, vx2...] 

图是具有代码所做的:

glEnableClientState(GL_VERTEX_ARRAY) 
glEnableClientState(GL_NORMAL_ARRAY) 
glEnableClientState(GL_COLOR_ARRAY) 
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, self.vbo_id) 

v_pointer = None 
n_pointer = ctypes.c_void_p(12) 
c_pointer = ctypes.c_void_p(24) 

v_stride = 24 
n_stride = 24 
c_stride = 24 

glVertexPointer(3, 
       GL_FLOAT, 
       v_stride, 
       v_pointer) 
glNormalPointer(GL_FLOAT, 
       n_stride, 
       n_pointer) 
glColorPointer(3, 
       GL_FLOAT, 
       c_stride, 
       c_pointer) 

glDrawArrays(GL_TRIANGLES,  #POINTS 
      0, 
      self.len_) 
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0) # reset 
glDisableClientState(GL_COLOR_ARRAY) 
glDisableClientState(GL_NORMAL_ARRAY) 
glDisableClientState(GL_VERTEX_ARRAY) 

显示的几何形状应该是一个简单的立方体,但我得到的是随机取向的三角形(见图)。我正在阅读关于PyOpenGL here中的glVertexPointer()问题,并发现solutionctypes.c_void_p(),但我不确定如何实现它。有人能指出我在做什么错或在这里失踪?或者我该如何解决这个问题?

基于该documentationstride参数在VBO阵列相同类型(顶点,法线,色彩...)(以字节为单位)的连续2个阵列之间的偏移量。或不?

drawn triagles

回答

0

我已经解决了关于法线的问题。代码是:

v_pointer = ctypes.c_void_p(0) # or None 
    n_pointer = ctypes.c_void_p(12) 
    c_pointer = ctypes.c_void_p(24) 

    v_stride = 36 
    n_stride = 36 
    c_stride = 36 

但我仍然有颜色的问题,因为模型是不丰富多彩? :)任何想法都非常感谢。