파이썬과 PyOpenGL을 사용하여 지오메트리를 표시하기 위해 인터리브 된 VBO
을 사용하고 있습니다.glVertexPointer(), glNormalPointer - PyOpenGL의 보폭 및 포인터 매개 변수
[vx1, vy1, vz1, nx1, ny1, nz1, R1, G1, B1, vx2...]
그리기 코드로 만든 : :이 VBO는 정점, 법선과 색상으로 구성되어
이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()
문제를 읽었으며 solution을 ctypes.c_void_p()
으로 찾았지만 구현 방법을 잘 모르겠습니다. 누군가 내가 여기서 잘못하거나 잘못하고있는 것을 지적 할 수 있습니까? 또는 어떻게 해결할 수 있습니까?
documentation을 기반으로 stride
매개 변수는 VBO
배열에있는 동일한 유형 (정점, 법선, 색상 ...)의 연속 된 두 배열 (바이트) 사이에서 오프셋됩니다. 안 그래요?