Mipmapping в OpenGL

У меня много проблем с получением мипмапов на работу. Я использую 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. Итак, я не понимаю, каким может быть любой другой код — по крайней мере, я не могу думать ни о чем другом, как это могло бы быть.

2

Решение

Значение mipmaps равно 8. Ваше изображение 256×256. Следовательно, у вас должно быть 9 уровней mipmapping (256,128,64,32,16,8,4,2,1). Если один из них отсутствует, вы потеряете текстуру.

5

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]