форматы glInterleavedArray - PullRequest
       4

форматы glInterleavedArray

0 голосов
/ 25 июля 2011

У меня есть формат чередующегося массива, и я хочу отрендерить его в открытом 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 Ответ

2 голосов
/ 25 июля 2011

Нет, вы не можете ИЛИ их.Вам необходимо использовать следующий код:

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);
...