2012-06-16 2 views
2

С помощью метода, такого как glColor4f(0f, 0f, 0f, 0f);, он устанавливает значения для любых параметров, которые вы вводите. Однако то, что я хотел бы сделать, это лишь слегка изменить цвет. Есть ли какой-либо существующий метод OpenGL, который будет добавлять или вычитать его параметры для существующих цветов, которые у него есть?Метод изменения существующего цвета OpenGL

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

Итак, в заключение я хотел бы знать, существует ли какой-либо метод для редактирования существующего RGBA или, по крайней мере, для извлечения существующего RGBA.

ответ

2

Ну, вы можете получить последнее значение, установленное glColor4f, с помощью glGet с GL_CURRENT_COLOR, но я бы не рекомендовал его; glGet операции, как правило, плохо для вашей производительности, поэтому старайтесь не делать это слишком часто.

Лучшей идеей было бы сохранить локальную копию последнего значения, которое вы отправили на адрес glColor4f, так что у вас есть клиентская сторона данных, а не запрос от драйвера opengl.

Невозможно добавить или вычесть из текущего цвета, о котором я знаю.

Редактировать: На самом деле я просто посмотрел на эту функцию под названием glSecondaryColor, которая может делать то, что вы хотите. Вы можете указать второй цвет RBG, а затем включить GL_COLOR_SUM, и два цвета будут добавлены вместе.

+0

Это прекрасно, но оно не работает с отрицательными параметрами для вычитания, такими как 'glSecondaryColor3d (0, -15/255d, 0)'. Тем не менее, я играл с ним, и я уверен, что могу добиться такого же эффекта, выполняя 'glSecondaryColor3d (15/255d, 0,15/255d)'. Несмотря ни на что, это именно то, что я искал, поэтому спасибо. – GlassZee

+0

Действительно? Согласно странице руководства, вы должны иметь возможность подавать отрицательный цвет. http://www.opengl.org/sdk/docs/man/xhtml/glSecondaryColor.xml @GlassZee – Tim

+0

Да, это не проявляется как разница при вводе отрицательных значений. Довольно стыдно, правда. Но я придумал еще лучшее решение проблемы - начиная с R, G и B немного выше, а затем медленно опуская G на 0. Это буквально «та же разница». Просто нужно затемнить исходные текстуры на сумму, которую вы добавляете на них. – GlassZee

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