繁体   English   中英

glColorPointer()无法在交错的VBO中绘制顶点颜色

[英]glColorPointer() not painting vertex color in interleaved VBO

我正在使用(Python和PyOpenGL)交错VBO(顶点,法线,颜色),形式为:

Vx1, Vy1, Vz1, Nx1, Ny1, Nz1, R1, G1, B1, A1, Vx2...

VBO通过以下方式生成:

self.vbo_id = glGenBuffers (1)
glBindBuffer(GL_ARRAY_BUFFER, self.vbo_id)

#    upload data to VBO
data = model_loader.Model_loader(filename = "geometry.STL")  
self.N_vertices = len(vertices)

alpha = 1
color = np.array([[0.1, 0.1, 0.1, alpha]], dtype='float32')
colors = np.repeat(color, self.N_vertices, axis=0)

VBO_data = VBO_reshape.create_VBO_array(data.vertices, data.normals, colors, GL_primitive_type = "triangle", interleaved_type = "true")
VBO_size_bytes = arrays.ArrayDatatype.arrayByteCount(VBO_data)

glBufferData(GL_ARRAY_BUFFER, VBO_size_bytes, VBO_data, GL_STATIC_DRAW)
glBindBuffer(GL_ARRAY_BUFFER, self.vbo_id)

VBO的几何图形是使用以下代码绘制的:

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

v_stride = 40
n_stride = 40
c_stride = 40

glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, self.vbo_id)
# enable vertex array
glEnableClientState(GL_VERTEX_ARRAY)
glVertexPointer(3, GL_FLOAT, v_stride, v_pointer)

# enable normal array 
glEnableClientState(GL_NORMAL_ARRAY)
glNormalPointer(GL_FLOAT, n_stride, n_pointer)

# enable color array 
glEnableClientState(GL_COLOR_ARRAY)
glColorPointer(4, GL_FLOAT, c_stride, c_pointer)

glDrawArrays(GL_TRIANGLES, 0, self.N_vertices)

glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0) # reset

glDisableClientState(GL_COLOR_ARRAY)
glDisableClientState(GL_NORMAL_ARRAY)
glDisableClientState(GL_VERTEX_ARRAY)

正确绘制了几何图形(顶点和法线)(请参见下图)。 我想用不同的颜色绘制每个顶点,但是不绘制任何颜色吗? 有什么建议如何使用GL_TRIANGLES绘制顶点颜色并调用gl_DrawArrays()glColorPointer吗? 我必须使用着色器还是可以不使用着色器来完成? 如果我理解正确,则可以不使用着色器而完成。 在此处输入图片说明

问题解决了。 解决方案是禁用照明和灯光。 但是有一个新的。 如果禁用灯光并照明模型,则模型将以统一的颜色绘制,则看起来在绘制时未使用法线。

  • 左立方体:禁用顶点颜色和照明(和灯光)
  • 中心立方体:不显示顶点颜色,因为启用了灯光(和)
  • 右方:禁用顶点和照明(和灯光)的统一颜色

在此处输入图片说明

我想绘制中心立方体,但将(均匀)颜色作为正确的立方体。 我想问你如何做到这一点? 我使用交错VBO。 感谢您的建议,因为现在我没有它们了:)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM