所以,我成功绘制了一系列使用两个VBO的顶点和一个索引的线。 Python的列表是:Pyopengl - 从VBO绘制的几条线,但是索引颜色VBO不起作用
vertices = [
[0,1],[0,2],[0,3], # Axes 1
[1,4],[1,5],[1,6], # Axes 2
[2,10],[2,11],[2,12] # Axes 3
]
indexes = [
0,4,4,7, # Line 1
1,4,4,8, # Line 2
3,6,6,9 # Line 3
]
我然后将这些为numpy的阵列和麻生太郎维也纳组织:
vertexarray = np.array(vertices, dtype=np.float32)
indexarray = np.array(indexes, dtype=np.int32)
vertexvbo = glvbo.VBO(vertexarray)
indexvbo = glvbo.VBO(indexarray, target=GL_ELEMENT_ARRAY_BUFFER)
然后我绑定并使用绘制这些行:
glLineWidth(1)
glColor4f(1,1,1,1)
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)
glEnable(GL_BLEND)
glEnableClientState(GL_VERTEX_ARRAY)
vertexvbo.bind()
indexvbo.bind()
glVertexPointer(2, GL_FLOAT, 0, None)
glDrawElements(GL_LINES, len(indexarray), GL_UNSIGNED_INT, None)
glDisableClientState(GL_VERTEX_ARRAY)
glDisable(GL_BLEND)
由于此图显示(粗体白线只是使用标准OpenGL命令绘制的轴):
现在问题来了,当我尝试着色这些。由于每个3线中的由2条较小的线,我创建尺寸3的颜色阵列:
colors = []
for i in range(0,3):
r = random.uniform(0.1,1)
g = random.uniform(0.1,1)
b = random.uniform(0.1,1)
color = [r,g,b,0.7]
colors.append(color)
然后一个颜色索引阵列具有以下值:
colorindexes = [
0,0,0,0, # Line 1
1,1,1,1, # Line 2
2,2,2,2 # Line 3
]
我然后这些转换为numpy的阵列和创建维也纳组织:
colorarray = np.array(colors, dtype=np.float32)
colorindexarray = np.array(colorindexes, dtype=np.int32)
colorvbo = glvbo.VBO(colorarray)
colorindexvbo = glvbo.VBO(colorindexarray, target=GL_ELEMENT_ARRAY_BUFFER)
为了然后绑定并使用此VBO我从前面的代码的glEnableClientState(GL_VERTEX_ARRAY)行之前添加以下代码:
glEnableClientState(GL_COLOR_ARRAY)
colorvbo.bind()
colorindexvbo.bind()
glColorPointer(4, GL_FLOAT, 0, None)
然而线不正确的颜色,如以下图所示,(对于线的数据是随机的,从而这些线不应该在相同的点作为在先前画面相交):
我对你在这里使用“颜色索引”一词感到十分困惑。在某些地方,你的代码似乎在[正确的意义上]使用它们(http://web.agelid.com/protect/utile/documentation/OpenGL/OpenGL%204%20-%20Color%20Index%20Mode.htm)(例如替代颜色模式为RGB [A]),但在其他地方,您将它们用作元素数组缓冲区(例如绘制顶点的索引)。你能详细说明你在这里想要做什么吗?颜色索引可以通过调用'glIndexPointer(...)'来设置,但我不相信你实际上正确地使用了“颜色索引”这个术语。 –
我指的是颜色元组列表的索引。其中每个两段线具有不同的颜色并因此具有不同的颜色索引值。基本上,我试图找到一种方法,可以在从顶点的VBO中绘制时分别对每条线着色。在我的完整代码中记住,我绘制了数百万行... –
也为什么我不能使用'glColorPointer(...)'函数[here](http://www.opengl.org/sdk/docs /man2/xhtml/glColorPointer.xml),我之前在从未索引的VBO中绘制线条时使用了这个功能? –