2009-04-11 2 views
11

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

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

Любые обычные подозреваемые?

+0

Вы не видите только текстуры или объекты, когда они текстурированы? – dragonfly

+0

Хм, я знаю, что объекты есть, как я уже сказал, но я не могу быть уверен, что они каким-то образом не исчезли (хотя это маловероятно, так как введение цвета - это всего лишь изменение кода) ... –

+0

Итак, вы видите объекты, хотя они не текстурированы? Например. в какой-то окраске, но без текстур? – dragonfly

ответ

9

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

  • glEnable(GL_TEXTURE_2D); наличие

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

+0

Несмотря на то, что у меня были оба эти проблемы, проблема все еще не была решена. После выполнения большого рефакторинга он снова начал работать. Я подозреваю, что это, возможно, проблема перевода, но, тем не менее, спасибо за предложения; Я принял этот ответ, поскольку у него самые высокие показатели! :) –

+0

У меня возникла проблема с моими текстурами и вызовом 'glEnable (GL_TEXTURE_2D); исправлена ​​моя проблема. Спасибо. –

+0

В моем случае 'glUseProgram (0)' разрешил проблему, потому что в другом месте моего кода я забыл сбросить это. –

2

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

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

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

0

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

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

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

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

1

Одна из распространенных проблем я сталкиваюсь время от времени

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_NEAREST); 

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

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); 
+0

Благодарим вас за это, он спас мой бекон с OpenGL 4.1+ – Cardano

0

Пришло время понять это ...

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

Смежные вопросы