Что не так с моим использованием glBindTexture? - PullRequest
1 голос
/ 08 ноября 2011

Я рисую шахматную доску, используя 2 разные текстуры. Один для черных квадратов и один для белых квадратов. Однако вместо того, чтобы каждый квадрат имел свою собственную текстуру, все они берут последнюю текстуру, которую я связал, называя glBindTexture(GL_TEXTURE_2D, id);.

Это мой подход:

glEnable(GL_TEXTURE_2D);    
glBegin(GL_QUADS);
    // square 0, 0 ( front left )
    glBindTexture(GL_TEXTURE_2D, textureBlackSquare->texID);
    glNormal3f(0, 1, 0);
    glTexCoord2f(0, 0); glVertex3f(-8.0, 0.5,  8.0);
    glTexCoord2f(1, 0); glVertex3f(-6.0, 0.5,  8.0);
    glTexCoord2f(1, 1); glVertex3f(-6.0, 0.5,  6.0);
    glTexCoord2f(0, 1); glVertex3f(-8.0, 0.5,  6.0);
glEnd();

glBegin(GL_QUADS);
    // square 1, 0        
    glBindTexture(GL_TEXTURE_2D, textureWhiteSquare->texID);
    glTexCoord2f(0, 0); glVertex3f(-6.0, 0.5,  8.0);
    glTexCoord2f(1, 0); glVertex3f(-4.0, 0.5,  8.0);
    glTexCoord2f(1, 1); glVertex3f(-4.0, 0.5,  6.0);
    glTexCoord2f(0, 1); glVertex3f(-6.0, 0.5,  6.0);
glEnd();

Когда я запускаю этот код, обе четверки имеют границы белой текстуры. Как заставить каждый квад иметь собственную текстуру?

Ответы [ 3 ]

10 голосов
/ 08 ноября 2011

Вы не можете позвонить glBindTexture в середине glBegin/End.Вы можете вызывать вершинные функции только в начале / конце.

Кроме того, почему бы вам просто не сделать одну текстуру в виде шахматной доски 8x8, а затем просто визуализировать один квад для рисования всей шахматной доски?

3 голосов
/ 08 ноября 2011

С документация :

GL_INVALID_OPERATION генерируется, если glBindTexture выполняется между исполнение glBegin и соответствующее исполнение glEnd.

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

2 голосов
/ 08 ноября 2011

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

Вместо этого вы сортируете объекты сцены по текстуре, которую они используют, и группируете их по этому. Таким образом, вы сначала визуализируете все четырехугольники шахматной доски с использованием первой текстуры (скажем, белого цвета), а после этого все четырехугольники с использованием второй текстуры (затем черного цвета).

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