2013-12-10 62 views
0

我使用的形式(Python和PyOpenGL)交织VBO(顶点,正常,颜色):glColorPointer()在交织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) 

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

VBO与生成从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?我必须使用着色器,还是可以在没有着色器的情况下完成这项工作?如果我理解正确,可以在不使用着色器的情况下完成。 enter image description here

回答

0

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

  • 左立方体:顶点颜色和照明(和光)残疾人
  • 中心立方体:顶点颜色不会显示,因为照明(和)灯启用
  • 右立方体:顶点和照明的颜色均匀(和光)残疾人

enter image description here

我想提请中央立方体但(统一)的颜色作为右立方体。我想问你,这是如何实现的?我使用交错VBO。感谢您的建议,因为现在我没有他们:)

+0

Stack Overflow不是一个论坛,您发布的内容不是直接答案,因为您在答案中提出了一个新问题。答案应该是AN ANSWER,别无他法。 – Vallentin

+1

我建议你阅读[SO社区准则](http://stackoverflow.com/help)。无论如何,客户端数组,内置数组属性和固定函数着色都是不推荐的,仅供参考,唯一具有统一颜色的多维数据集就是右边的那个。不同色调的相同色调不是同一种颜色。我怀疑你在找什么,但是是'GL_COLOR_MATERIAL'。 – bcrist