2013-09-29 2 views
1

Я обрабатываю много выровненных по оси 3D-кубов. Каждый куб может отличаться друг от друга положением его центра куба и/или цвета. Это как, я делает его прямо сейчасOpenGL Instanced Rendering без шейдеров

for (i = 0; i < num_of_cubes; ++i) { 
glTranslatef(center[i].x, center[i].y, center[i].z); 
DrawCube(); 
} 

Мой DrawCube() просто делает 6 квадрациклов, соответствующие каждой стороне куба, используя glDrawElements с вершинных данных, хранящихся в VBO. glVertexPointer и glColorPointer используются для установки элементов атрибута.

Это работает, но я хочу использовать Instanced rendering, используя, вероятно, glDrawElementsInstanced(). Однако из-за некоторого устаревшего кода проекта я должен использовать конвейер с фиксированной функцией.

Возможно ли это с фиксированным трубопроводом? Если да, то как я могу сказать, что мой GPU использует Instance vbo из воксельных центров и цветов.

+1

Вы можете использовать профиль совместимости и включить шейдеры только тогда, когда они вам понадобятся (в новом коде), а затем выключить их снова. Вот почему есть профиль совместимости, чтобы облегчить переход. – datenwolf

+0

Спасибо. Мне потребовалось некоторое время, но я перешел на профиль совместимости – iNFINITEi

ответ

0

Как прокомментировал datenwolf, я переключился на профиль совместимости. Я использовал Qt с большим количеством существующего фиксированного кода конвейера. Поэтому я привязываю и отвязываю шейдеры после каждого экземпляра рендеринга.

Смежные вопросы