После внесения нескольких изменений в мое приложение, мои текстуры больше не отображаются. Пока я проверил следующее:
- Направление камеры не изменилось.
- Я вижу векторы (когда они окрашены вместо текстурированных).
Любые обычные подозреваемые?
После внесения нескольких изменений в мое приложение, мои текстуры больше не отображаются. Пока я проверил следующее:
Любые обычные подозреваемые?
Вы можете проверить следующее:
glEnable(GL_TEXTURE_2D);
наличие
glBindTexture(GL_TEXTURE_2D,
texture[i]);
и
glBindTexture(GL_TEXTURE_2D, 0);
когда вам больше не нужна текстура
Еще несколько вещей, которые нужно проверить:
Помогает ли glColor3ub (255,255,255) перед рендерингом вашего текстурированного объекта? Я думаю, что состояние OpenGL по умолчанию умножает текущий glColor на входящий texel; блуждающий glColor3ub (0,0,0) заставит все ваши текстуры выглядеть черными.
Я предполагаю, что у вас должны были быть реализованы операции, такие как glEnable (GL_TEXTURE_2D) и привязка текстуры, так как ваши текстуры отлично работали раньше, а затем внезапно они просто не отображаются.
Если вы делаете объектно-ориентированный код, вы можете захотеть, чтобы генерация текстуры произошла, когда поток, который фактически выполняет ничью, инстанцируется, другими словами: избегайте делать это в конструкторах или вызове, исходящем от конструктора, это может экземпляр вашего объекта текстуры перед окном или приложение, которое будет использовать его, включено.
Что я обычно делаю, так это то, что я создаю ручную функцию Init для создания текстуры, которая вызывается в функции Init приложения. Поэтому я гарантирую, что приложение существует, когда происходит привязка.
Дополнительная информация здесь: http://www.opengl.org/wiki/Common_Mistakes#The_Object_Oriented_Language_Problem
Одной из распространенных проблем, с которой я сталкиваюсь время от времени, является
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_NEAREST);
но я забыл предоставить mipmaps. Quickfix:
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
Мне понадобилось некоторое время, чтобы понять это...
glMatrixMode(GL_TEXTURE);
glLoadIdentity();
glDisable(GL_TEXTURE_GEN_S);
glDisable(GL_TEXTURE_GEN_T);
glDisable(GL_TEXTURE_GEN_R);
glDisable(GL_TEXTURE_GEN_Q);
Также обязательно отвяжите свои вещи:
glBindBuffer(GL_ARRAY_BUFFER, 0);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
glBindVertexArray(0);
Если вы используете сторонний движок, который оптимизирован, он, вероятно, имеет уровень прямого доступа к OpenGL (чтобы не использовать медленные функции запросов OpenGL). Если это так, не вызывайте OpenGL напрямую, а используйте обертки. В противном случае ваш код не будет хорошо работать с остальной частью кода двигателя.