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.
защо го правя Програмата, която направих, рисува 3D вектори в пространството и посочва дължината им с цвета им. На потребителя се предлага да избере горещите (висока стойност) и студените (ниска стойност) цветове и програмата автоматично ще направи градиента, използвайки HSV мащабиране.
Защо HSV мащабиране? тъй като HSV е с една стойност в цветната карта, която използвам, и създаването на градиенти с него линейно е много лесна задача. За да може потребителят да избере цветовете, аз му предлагам цветна карта на QColourDialog
http://qt-project.org/doc/qt-4.8/qcolordialog.html
На тази цветна карта можете да видите, че червеното е налично от дясната и лявата страна, което прави невъзможно да има линейна скала за тази цветна карта с RGB. Но с HSV линейната скала е много лесно постижима, където просто трябва да използвам линейна скала между 0 и 360 за стойностите на Hue.
С тази парадигма можем да видим, че горещите и студените цветове определят посоката на градиента, така че например, ако избера нюанс да бъде 0 за студено и 359 за горещо, HSV ще ми даде градиент между 0 и 359 и ще включете целия спектър от цветове в градиента; докато в OpenGL основно ще премине от червено към червено, което не е градиент!!!!!!
Как мога да принудя OpenGL да използва HSV градиент вместо RGB? Единствената идея, която ми хрумва, е да нарежа правоъгълника, който искам да оцветя, и да направя много градиенти върху по-малки правоъгълници, но мисля, че това не е най-ефективният начин да го направя.
Някакви идеи?