Вопрос об альфа-смешении OpenGL ES с несколькими текстурами - PullRequest
0 голосов
/ 23 декабря 2009

Это может быть нубский вопрос, однако я не смог найти подходящих ответов:

У меня есть объект в OpenGL ES (на самом деле, экспорт с UV-отображением из Blender), и я хотел бы применить к нему две текстуры. Если быть точным, у меня есть сфера, похожая на землю, и я хотел бы добавить к ней две текстуры (дневную и ночную).

Я думал, что с помощью альфа-картографии должна быть возможность программно затухать одной текстурой и отображать другую во время выполнения, чтобы мой глобус стал реалистичным симулятором Земли. У меня есть математика, то есть создание альфа-карты для каждого лица объекта не проблема.

Какие-нибудь подсказки / указатели, как этого можно достичь?

Спасибо

1 Ответ

5 голосов
/ 24 декабря 2009

Эффект, который вы ищете, может быть достигнут с помощью текстурных комбайнеров в OpenGL ES 1.1. По умолчанию каждая активированная вами единица текстуры настроена на умножение выходных данных предыдущего этапа на цвет текущей текстуры. В случае первого текстурного блока предыдущий этап - просто цвет вершины. Изменяя состояние объединителя текстур, вы можете вместо этого добавлять, вычитать, интерполировать или брать точечные продукты из ваших образцов текстур.

Второй и третий примеры на связанной странице, которые интерполируют две текстуры, должны быть очень похожи на то, что вы пытаетесь сделать. Если вы сравните исходный код для двух примеров, вы увидите, что они почти идентичны, за исключением конфигурации для GL_SRC2_RGB / GL_SRC2_ALPHA и GL_OPERAND2_RGB / GL_OPERAND2_ALPHA. Что вам нужно будет здесь указать, зависит от того, где / как вы генерируете коэффициент смешивания для двух текстур. Вы можете исходить из цвета вершины, указав GL_PRIMARY_COLOR для GL_SRC2_*, что не показано в примерах.

(Примечание. На странице, на которую я ссылался, рекомендуется использовать GLSL вместо объединителей текстур. К сожалению, этот вариант не подходит, если вашему программному обеспечению требуется работать на более старом оборудовании, которое не поддерживает OpenGL ES 2.0.)

...