У меня много проблем с получением мипмапов на работу. Я использую OpenGL 1.1, и у меня нет glu, поэтому я использую следующий код инициализации текстуры:
glGenTextures (1, texname); glBindTexture (GL_TEXTURE_2D, texname); glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST_MIPMAP_NEAREST); W = ширина, H = высота; для (int i = 0; i<мипмапы; я ++, ж / = 2, ч / = 2) glTexImage2D (GL_TEXTURE_2D, я, GL_RGBA8, ш, ч, 0, GL_RGBA, GL_UNSIGNED_BYTE, текс [I]);
Переменные:
// типы данных: unsigned long int * tex [20]; int mipmaps, ширина, высота, w, h; GLuint texname;
tex
массив, содержащий список пиксельных массивов mipmap для текстур Мип-карты обрабатываются правильно (я проверял их индивидуально). mipmaps
это число мипмапов, которые уменьшают исходное изображение до текстуры 1×1 пикселя (исходная текстура 256×256 — так что на данный момент в коде это 8). width
а также height
Размеры исходной текстуры (256х256).
В результате он даже не использует текстуру. Все просто выглядит плоским серым (серый из-за освещения).
Есть ли что-то, что я забыл? Я проверил эта ссылка, и я не могу найти никаких конфликтов.
Другие детали: В общем, я включаю GL_DEPTH_TEST, GL_TEXTURE_2D, GL_LIGHTING, GL_CULL_FACE, GL_FOG (и GL_LIGHT0, GL_LIGHT1, которые, вероятно, не имеют значения).
Кроме того, я использую реализацию Mesa 3D OpenGL (Mesa версия 4.0, что переводится как OpenGL версия 1.3), если это может иметь какое-либо отношение к этому.
РЕДАКТИРОВАТЬ:
Проблема в том, что текстура работает нормально (без использования mipmaps) в тот момент, когда я изменяю GL_NEAREST_MIPMAP_NEAREST на GL_NEAREST. Итак, я не понимаю, каким может быть любой другой код — по крайней мере, я не могу думать ни о чем другом, как это могло бы быть.
Значение mipmaps равно 8. Ваше изображение 256×256. Следовательно, у вас должно быть 9 уровней mipmapping (256,128,64,32,16,8,4,2,1). Если один из них отсутствует, вы потеряете текстуру.
Других решений пока нет …