Как я могу применить 2 или более карт текстуры к объекту gluSphere OpenGL? - PullRequest
4 голосов
/ 08 декабря 2008

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

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

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

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

Ответы [ 3 ]

6 голосов
/ 08 декабря 2008

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

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 ().

5 голосов
/ 08 декабря 2008

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

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

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

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

1 голос
/ 11 декабря 2008

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...