Я пытаюсь настроить простую функцию, которая облегчит мне текстурирование геометрии карты в OpenGL, но по какой-то причине, когда я пытаюсь создать скайбокс, вместо белого появляется текстурированная геометрия. Я думаю, что проблемный код заключается в следующем:
void MapTexture (char *File, int TextNum) {
if (!TextureImage[TextNum]){
TextureImage[TextNum]=auxDIBImageLoad(File);
glGenTextures(1, &texture[TextNum]);
glBindTexture(GL_TEXTURE_2D, texture[TextNum]);
glTexImage2D(GL_TEXTURE_2D, 0, 3, TextureImage[TextNum]->sizeX, TextureImage[TextNum]->sizeY, 0, GL_RGB, GL_UNSIGNED_BYTE, TextureImage[TextNum]->data);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
}
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, texture[TextNum]);
//glTexImage2D(GL_TEXTURE_2D, 0, 3, TextureImage[TextNum]->sizeX, TextureImage[TextNum]->sizeY, 0, GL_RGB, GL_UNSIGNED_BYTE, TextureImage[TextNum]->data);
//glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
}
Главное, чего я не понимаю, по какой-то причине glBindTexture()
должно находиться между glGenTextures()
и glTexImage2D
. Если я помещу это где-нибудь еще, это все испортит. Что может быть причиной этой проблемы? Извините, если это что-то простое, я новичок в openGL.
Ниже приведен скриншот whitebox, о котором я говорю:
+++++++++++++++++++++++++++++++
РЕДАКТИРОВАТЬ
+++++++++++++++++++++++++++++++
Поработав с кодом немного больше, я понял, что если я добавлю glTexImage2D()
и glTexParameteri()
после последнего glBindTexture()
, то все текстуры загрузятся. Почему без этих двух строк большинство текстур загружалось бы, а есть некоторые, которые не загружались бы, и почему я должен вызывать glTexImage () для каждого кадра, но только для нескольких текстур?