Разработвам проста 2D-игра в OpenGL ES за iPhone. Проблемът ми е, че искам да изобразя текстура, използвайки различни нюанси. По принцип искам да променя нюанса на цветовете в текстурата, която изобразявам. Простата промяна на glColor няма да свърши работа, тъй като засяга и частите на изображението без цвят. Някакви идеи?
OpenGL ES - Промяна на нюанса на цветовете в текстурата
Отговори (1)
Благодаря за разяснението, беше далеч от първоначалното ми разбиране. Имайте предвид, че текстурата, която предоставяте на OpenGL ES, вече има нюанс, така че това, което искате, е да промените съществуващия нюанс.
Първо, позволете ми да отговоря на зададения въпрос:
Нека започнем с това какво трябва да се случи с текселите. Тъй като OpenGL текстурите се съхраняват като RGB, за да трансформирате нюанса на тексел, трябва да отидете RGB->HSL->приложи нов нюанс->RGB. Можете да намерите действителната математика за извършване на RGB->HSL и обратно преобразуване тук. Как искате да изберете новия нюанс, предполагам, че ще трябва да го попълните.
Най-големият въпрос екогатрябва да се случи трансформацията. Е, конвейерът на OpenGL няма да ви позволи да направите толкова сложна трансформация при четене на текстура (все пак не в ES 1.1 - ES 2.0 fragment shaders
ще помогне, но на висока цена). Така че ще трябва да направите всички трансформации извън конвейера за текстуриране на GL ES. В зависимост от това колко често трябва да променяте нюансите, моят съвет е или да го правите офлайн (и да съхранявате различни тематични текстури), или да изчислявате нови текстури за новите нюанси при поискване точно преди да ги заредите в OpenGL ES.
Доколкото знам, GL ES 1.1 няма никакво вградено средство, което да помогне за това директно.
Сега, като направя крачка назад, не съм сигурен какво ви пречи да разделите на 2 текстури, ако можете да живеете с 2-те текстури, които да приложите по време на изпълнение. Математиката, която посочих, отделя наситеността от лекотата, без значение как е генерирана текстурата (и на теория нюансът трябва да е постоянен, ако разбирам правилно вашия случай). Извършването на изчисленията офлайн трябва да е сравнително лесно за всяка входна текстура?