glInterleavedArray格式

时间:2011-07-24 20:26:58

标签: opengl pyopengl

我有一个交错的数组格式,我想在open GL中渲染它。它是一组三角形。顶点是2D浮点,颜色是RGBA浮点。也就是说,这就是一个三角形:

{vertex.x, vertex.y, color.red, color.blue, color.green, color.alpha, ...}

其中所有数字都是单精度浮点数。我无法弄清楚格式参数应该是什么。看起来它需要V2F和C4F,但不存在这样的符号常数。我可以像(GL_V2F | GL_C4F)一样将它们组合在一起吗?

更新:我正在使用python和pyopengl。 tibur 的回答很清楚,如果我用C语言编程,我就会完成。 python代码非常相似,但我必须将指针偏移到颜色数组中8个字节。我不知道如何在python中执行此操作,或者甚至可以执行此操作:

strideInBytes = 24
interleavedBytes = array.tostring()
glVertexPointer(2, GL_FLOAT, 24, interleavedBytes) 
glColorPointer(4, GL_FLOAT, 24, interleavedBytes) #The first color actually starts on the 9th byte

我需要避免复制整个交错数组。否则我可以复制并切掉前8个字节。

1 个答案:

答案 0 :(得分:2)

不,你不能他们。您需要使用以下代码:

glVertexPointer(2, GL_FLOAT, 6*sizeof(float), ptr);
glColorPointer(4, GL_FLOAT, 6*sizeof(float), ((unsigned char*)ptr) + 2 * sizeof(float));
glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_COLOR_ARRAY);