Наложение текстур на Quad не работает - PullRequest
0 голосов
/ 27 декабря 2011

Я пытаюсь написать некоторый код, который будет рендерить текстуру на простой квадрат, но у меня возникли большие проблемы с тем, чтобы заставить ее работать.Я скачал некоторый пример исходного кода для наложения текстур здесь и скомпилировал его, и, похоже, он отлично выполняет наложение текстур на их цилиндр.Затем я добавил часть своего кода, чтобы увидеть, будет ли он отображать текстуру на моем квадрате, но он просто текстурирует его сплошным цветом, который кажется на полпути между красным и черным вместо шахматной доски, как на цилиндре.Вот код, который я добавил, сразу после вызова gluCylinder при первом проходе:

glBegin(GL_QUADS);
glTexCoord2f(0, 0);
glVertex2f(-1, -1);
glTexCoord2f(1,0);
glVertex2f(1, -1);
glTexCoord2f(1, 1);
glVertex2f(1,  1);
glTexCoord2f(0,1);
glVertex2f(-1,  1);
glEnd();

Есть ли причина, по которой текстуры будут нормально отображаться на цилиндре, но не на моем квадре?

1 Ответ

5 голосов
/ 27 декабря 2011

Пример кода включает автоматическую генерацию координат текстуры, поэтому ваши вызовы glTexCoord2f игнорируются. Автоматическая генерация проецируется на плоскость Z. Поскольку ваш четырехугольник представляет собой плоскость Y, он, по сути, просто растягивает один пиксель текстуры по всему четырехугольнику.

Чтобы заставить его работать, отключите автоматическую генерацию текстуры перед вашим glBegin, а затем снова включите его после glEnd.

т.е:.

glDisable(GL_TEXTURE_GEN_S);
glDisable(GL_TEXTURE_GEN_T);

glBegin(GL_QUADS);
   glTexCoord2f(0, 0);
   glVertex2f(-1, -1);
   glTexCoord2f(1,0);
   glVertex2f(1, -1);
   glTexCoord2f(1, 1);
   glVertex2f(1,  1);
   glTexCoord2f(0,1);
   glVertex2f(-1,  1);
glEnd();

glEnable (GL_TEXTURE_GEN_S);
glEnable (GL_TEXTURE_GEN_T);

В качестве альтернативы, вы можете настроить автоматическую генерацию текстур для проецирования на плоскость Y и опустить вызовы glTexCoord2f, а затем установить обратно в Z, когда закончите:

float zPlane[4] = {0., 0., 1., 0.};
float yPlane[4] = {0., 1., 0., 0.};
glTexGenfv (GL_T, GL_OBJECT_PLANE, yPlane);

glBegin(GL_QUADS);
   glVertex2f(-1, -1);
   glVertex2f(1, -1);
   glVertex2f(1,  1);
   glVertex2f(-1,  1);
glEnd();

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