Могу ли я установить пользовательскую функцию, которая изменит цвет списка отображения в OpenGL?

У меня есть геометрия, хранящаяся в списке отображения, но я хотел бы иметь возможность рисовать один и тот же список отображения с разными «оттенками». Например, если бы у меня был черно-белый череп в списке отображения, я хотел бы установить красный оттенок и нарисовать череп, затем установить синий оттенок и нарисовать череп.

Если я могу получить значения RGBA, я точно знаю, как их преобразовать, но я не уверен, где я могу их перехватить. В настоящее время списки отображения не содержат текстур, но они, вероятно, будут в будущем, поэтому было бы хорошо, если бы ответ работал с текстурами или без них.


person Tom Dalling    schedule 13.03.2012    source источник


Ответы (1)


Концептуально список отображения — это просто набор команд, которые выполняются, когда вы glCallList. Таким образом, что бы он ни содержал, он будет выглядеть так, как если бы вы использовали эти команды напрямую (но возможно с большей производительностью). Итак, если ваш список отображения содержит набор геометрических команд, как их раскрасить? Да, как вы уже догадались, используя обычную команду glColor прямо перед вызовом списка:

glColor(...);
glCallList(...);

Если вы хотите, чтобы ваши объекты имели текстуру и по-прежнему могли быть окрашены, вы можете просто установить среду текстуры на GL_MODULATE (я думаю, вы не используете шейдеры, иначе весь вопрос в любом случае был бы совершенно устаревшим). Если вы хотите, чтобы ваши объекты освещались, измените glColor на glMaterial, конечно.

Но если вы установите цвет внутри списка отображения, у вас не будет возможности получить его и изменить. Но в любом случае я бы не советовал вам использовать списки отображения. Если вы используете их для хранения геометрии, а также для уменьшения копий CPU-GPU и накладных расходов на вызовы отрисовки, то почему бы не использовать VBO., которые как раз для этого и созданы (и не страдают такой неопределенной реализацией).

person Christian Rau    schedule 13.03.2012
comment
В списках отображения уже есть цвета, поэтому я начал играться с фрагментным шейдером и думаю, что он решит проблему. Впервые я использовал шейдеры прошлой ночью, поэтому я не уверен на 100%, что я могу с ними сделать. Я мог бы переключиться на VBO, потому что я не понимал, что списки отображения устарели. - person Tom Dalling; 14.03.2012