Какие обычные шаги по устранению неполадок для текстур OpenGL не отображаются? - PullRequest
12 голосов
/ 11 апреля 2009

После внесения нескольких изменений в мое приложение, мои текстуры больше не отображаются. Пока я проверил следующее:

  • Направление камеры не изменилось.
  • Я вижу векторы (если они окрашены, а не текстурированы).

Есть обычные подозреваемые?

Ответы [ 6 ]

9 голосов
/ 11 апреля 2009

Вы можете проверить следующее:

  • glEnable(GL_TEXTURE_2D); присутствие

  • glBindTexture(GL_TEXTURE_2D, texture[i]); и glBindTexture(GL_TEXTURE_2D, 0); когда вам больше не нужна текстура

2 голосов
/ 12 апреля 2009

Еще несколько вещей для проверки:

  • glColorMaterial (...); Чтобы убедиться, что цвета не перезаписывают текстуру
  • glEnable / glDisable (GL_LIGHTING); Иногда освещение может размыть текстуру
  • glDisable (GL_BLEND); Убедитесь, что вы не смешиваете текстуру
  • Убедитесь, что координаты текстуры установлены правильно.
1 голос
/ 22 марта 2013

Время от времени я сталкиваюсь с одной общей проблемой:

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_NEAREST);

но я забыл поставить мипмапы. Quickfix:

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
0 голосов
/ 25 ноября 2016

Мне понадобилось время, чтобы понять это ...

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 напрямую, а используйте упаковщики движка. В противном случае ваш код не будет хорошо сочетаться с остальной частью кода двигателя.

0 голосов
/ 28 августа 2012

Я предполагаю, что у вас были обязательные операции, такие как glEnable (GL_TEXTURE_2D) и привязка к текстуре, так как раньше ваши текстуры работали нормально, а затем внезапно они просто не будут отображаться.

Если вы делаете объектно-ориентированный код, вы можете захотеть, чтобы генерация текстуры происходила, когда создается экземпляр потока, который фактически выполняет рисование, другими словами: избегайте делать это в конструкторах или вызове, поступающем из конструктора, это может экземпляр объекта текстуры перед окном или приложение, которое будет его использовать.

Обычно я создаю ручную функцию Init для создания текстуры, которая вызывается в функции Init приложения. Поэтому я гарантирую, что приложение существует, когда происходит привязка.

Больше информации здесь: http://www.opengl.org/wiki/Common_Mistakes#The_Object_Oriented_Language_Problem

0 голосов
/ 17 апреля 2009

Помогает ли glColor3ub (255,255,255) перед рендерингом вашего текстурированного объекта? Я думаю, что состояние OpenGL по умолчанию умножает текущий glColor на входящий тексель; блуждающий glColor3ub (0,0,0) заставит все ваши текстуры выглядеть черными.

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