OpenGL может раскрасить прямоугольник с градиентом цветов от одной стороны к другой.Я использую следующий код для этого в C ++
glBegin(GL_QUADS);
{
glColor3d(simulationSettings->hotColour.redF(), simulationSettings->hotColour.greenF(), simulationSettings->hotColour.blueF());
glVertex2d(keyPosX - keyWidth/2, keyPosY + keyHight/2);
glColor3d(simulationSettings->coldColour.redF(), simulationSettings->coldColour.greenF(), simulationSettings->coldColour.blueF());
glVertex2d(keyPosX - keyWidth/2, keyPosY - keyHight/2);
glColor3d(simulationSettings->coldColour.redF(), simulationSettings->coldColour.greenF(), simulationSettings->coldColour.blueF());
glVertex2d(keyPosX + keyWidth/2, keyPosY - keyHight/2);
glColor3d(simulationSettings->hotColour.redF(), simulationSettings->hotColour.greenF(), simulationSettings->hotColour.blueF());
glVertex2d(keyPosX + keyWidth/2, keyPosY + keyHight/2);
}
Я использую некоторые библиотеки Qt для преобразования между HSV и RGB.Как видно из кода, я рисую прямоугольник с цветовым градиентом от того, что я называю hotColour к coldColour.
Почему я это делаю?Созданная мной программа рисует трехмерные векторы в пространстве и указывает их длину по цвету.Пользователю предлагается выбрать горячий (высокое значение) и холодный (низкое значение) цвета, и программа автоматически выполнит градиент, используя масштабирование HSV.
Почему масштабирование HSV?потому что HSV однозначен по всей используемой мной цветовой карте, и линейное создание градиентов с ним - очень простая задача.Чтобы пользователь мог выбрать цвета, я предлагаю ему цветовую карту QColourDialog
http://qt -project.org / doc / qt-4.8 / qcolordialog.html
На этой цветовой карте вы можете видеть, что красный доступен с правой и левой стороны, что делает невозможным линейный масштаб для этой цветовой карты с RGB.Но с HSV, линейная шкала очень легко достижима, где я просто должен использовать линейную шкалу между 0 и 360 для значений оттенка.
С этой парадигмой мы видим, что горячие и холодные цвета определяют направлениедля градиента, например, если я выберу оттенок 0 для холодного и 359 для горячего, HSV даст мне градиент от 0 до 359 и включит весь спектр цветов в градиент;в то время как в OpenGL он будет в основном переходить с красного на красный, что не является градиентом !!!!!!
Как я могу заставить OpenGL использовать градиент HSV, а не RGB?Единственная идея, которая приходит мне в голову, - это нарезать прямоугольник, который я хочу раскрасить, и сделать много градиентов по меньшим прямоугольникам, но я думаю, что это не самый эффективный способ сделать это.
Есть идеи?