Могу ли я установить пользовательскую функцию, которая будет изменять цвет списка отображения в OpenGL? - PullRequest
0 голосов
/ 13 марта 2012

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

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

1 Ответ

0 голосов
/ 13 марта 2012

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

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

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

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

...