【问题标题】:glColorPointer() not painting vertex color in interleaved VBOglColorPointer() 不在交错的 VBO 中绘制顶点颜色
【发布时间】:2013-12-28 00:27:33
【问题描述】:

我正在使用(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?我必须使用着色器还是可以在没有着色器的情况下完成?如果我理解正确,它可以在不使用着色器的情况下完成。

【问题讨论】:

    标签: python opengl shader vbo pyopengl


    【解决方案1】:

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

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

    我想绘制中心立方体,但使用(统一)颜色作为正确的立方体。我想请问您如何才能实现这一目标?我使用交错的 VBO。感谢您的建议,因为现在我没有他们:)

    【讨论】:

    • Stack Overflow 不是论坛,您发布的内容也不是直接的答案,因为您在答案中提出了新问题。答案应该是 ANSWER,仅此而已。
    • 我建议您阅读SO community guidelines。无论如何,客户端数组,内置数组属性和固定功能阴影都已弃用,仅供参考,上面唯一颜色统一的立方体是右边的那个。相同色调的不同深浅不是相同的颜色。我怀疑你在找什么,但是GL_COLOR_MATERIAL
    猜你喜欢
    • 2020-12-16
    • 1970-01-01
    • 2013-12-19
    • 1970-01-01
    • 1970-01-01
    • 2012-10-19
    • 1970-01-01
    • 1970-01-01
    • 2018-08-19
    相关资源
    最近更新 更多