Как я могу применить 2 или более карт текстуры к объекту gluSphere OpenGL?

StackOverflow https://stackoverflow.com/questions/348266

  •  20-08-2019
  •  | 
  •  

Вопрос

Я пишу базовое приложение для просмотра планет OpenGL Perl, просто для удовольствия. У меня есть основы работы с великолепной планетой, реализованные с помощью gluSphere(), вращающегося с применением классической карты текстур Земли.

А что если я захочу применить вторую карту текстур через OpenGL (скажем, " earth clouds ")?

Конечно, я могу смешать две карты текстур самостоятельно в PhotoShop или каком-либо другом графическом приложении, но есть ли способ через OpenGL API?

Я попытался загрузить две текстуры и сгенерировать мип-карты, но планета показывается только с применением первой текстуры, а не второй.

Это было полезно?

Решение

Как сказал Джим Бак, вы можете получить желаемый эффект с помощью мультитекстурирования.

Однако я не думаю, что квадрики GLU поддерживают генерацию многотекстурных координат (т. е. использование glMultiTexCoord * () вместо glTexCoord * (). Поэтому я думаю, что вам понадобится собственный сферический код, чтобы пройти многотекстурный маршрут.

В качестве альтернативы вы можете избежать рисования немного большей сферы вокруг вашей текущей, на которой есть вторая текстурная карта (с соответствующим использованием альфа-канала & amp; blending). Это, вероятно, вызовет z-ссору, поэтому может быть больше проблем, чем стоит.

Написание собственного сферического кода не сложно - возможно, самый простой способ получить удовлетворительные результаты.

Другие советы

Как вы хотите, чтобы ваши текстуры были объединены? Вы должны быть в состоянии получить желаемый эффект, если просто используете мульти-текстуру

glEnable(GL_TEXTURE_2D);

glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, texture0ID);
glTexEnvf(GL_TEXTURE_ENV, ..., ...);

glActiveTexture(GL_TEXTURE1);
glBindTexture(GL_TEXTURE_2D, texture1ID);
glTexEnvf(GL_TEXTURE_ENV, ..., ...);

Обязательно настройте вызовы glTexEnvf в зависимости от того, как вы хотите, чтобы текстуры были объединены. Затем вызовите gluSphere ().

Я согласен с Дрю Холлом. Может быть, проще сделать вторую сферу. И не все карты OpenGL поддерживают мульти-текстурирование.

Вы можете противостоять z-боям с помощью glPolygonOffset.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top