Я пытаюсь загрузить несколько текстур (майнкрафт) и применить их к кубам.Я загружаю текстуры с SOIL:
GLuint loadTex(const char * path)
{
GLuint image = SOIL_load_OGL_texture // load an image file directly as a new OpenGL texture
(
path,
SOIL_LOAD_AUTO,
SOIL_CREATE_NEW_ID,
SOIL_FLAG_MIPMAPS |
SOIL_FLAG_INVERT_Y |
SOIL_FLAG_TEXTURE_REPEATS |
//SOIL_FLAG_MULTIPLY_ALPHA |
SOIL_FLAG_NTSC_SAFE_RGB |
SOIL_FLAG_COMPRESS_TO_DXT
);
if (!image)
{
printf("SOIL loading error: '%s'\n", SOIL_last_result());
}
std::cout << "texId: " << image << std::endl;
return image;
}
Я тестирую его, загружая 2 разные текстуры (и они получают разные идентификаторы).Я передаю эти текстуры функции, которая создает куб с заданным идентификатором текстуры:
GLuint createTexturedCube(GLuint texId)
{
GLuint index = glGenLists(1);
glNewList(index, GL_COMPILE);
glPushMatrix();
glEnable(GL_TEXTURE_2D);
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
glBindTexture(GL_TEXTURE_2D, texId);
glBegin(GL_QUADS);
glNormal3f(0, 1, 0);
glTexCoord2f(1, 1); glVertex3f(0.5f, 0.5f, -0.5f);
...
}
Я загружаю две текстуры и создаю два куба.Выход из SOIL показывает, что это id 1 и 2, но когда я рисую кубы, правильно показывает только последняя загруженная текстура.Другой кажется немного размытым.
Результат здесь:
Блок слева - последняя загруженная текстура, справа - первая текстуразагружен.Так происходит с любым количеством текстур, всегда последняя является правильной.
Я пытался использовать glActiveTexture, но это вызывает исключение (segfault пытается получить доступ к # 0000000)
Мои настройки текстуры следующие:
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glEnable(GL_ALPHA_TEST);
glAlphaFunc(GL_GREATER, 0.1);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER,
GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER,
GL_NEAREST);