Как назначить несколько текстур в одну сетку в OpenGL? - PullRequest
3 голосов
/ 16 ноября 2010

Первый пример: вы можете взять огромную сетку в форме камня и повесить на нее мозаичную текстуру.Теперь некоторые места необходимо покрыть текстурой травы (или другой растительностью).

Другой пример: обычно местность строится из плиточных текстур.Чтобы добиться менее «скучного» вида, вы можете применить к нему мозаичную текстуру в 4 раза больше (или 16 и т. Д.), И тем самым вы получите красивую «случайную» мозаичную текстуру (как видно изДокументы UDK).

Blender (приложение для трехмерной графики) основано на OpenGL и позволяет назначать несколько материалов одной сетке.

Как я могу это сделать в своем приложении OpenGL?Спасибо, Амир

PS: я ищу лучшее решение, чем рендеринг 50 трис с тексами и еще 3 трис с тексами б.

1 Ответ

1 голос
/ 16 ноября 2010

То, что вы ищете, называется мультитекстурирование . Современные видеокарты имеют несколько текстурных блоков, каждый из которых может выбирать различные текстуры. Когда вы визуализируете свой камень, вы указываете вершины, которые имеют UV-координаты для каждой текстуры, которую вы хотите визуализировать.

В OpenGL вы можете использовать glActiveTexture до , выбрать вашу активную текстурную единицу, чтобы вы могли привязать текстуру к ней и использовать ее в последующем рендеринге. Вашим вершинам понадобятся дополнительные пары координат текстуры; одна пара на текстуру, которую вы намереваетесь визуализировать.

Современный способ создания мультитекстурирования - использование шейдеров (обычно GLSL в OpenGL). Загрузите и свяжите каждую текстуру с различным модулем текстуры, установите унифицированную форму шейдера на значение используемых вами блоков текстуры (0 для блока текстуры 0 и т. Д.), Сэмплируйте каждую текстуру и смешайте, используя желаемую функцию смешивания, чтобы получить выходные данные. цвет.

...