Как я могу применить 2 или более карт текстуры к объекту gluSphere OpenGL?
Вопрос
Я пишу базовое приложение для просмотра планет 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.