Генерация текстур OpenGL - PullRequest
3 голосов
/ 23 октября 2011

В настоящее время я пытаюсь понять, как использовать OpenGL. Я хочу создать текстуру из байтового буфера.

По какой-то причине, когда я делаю это с glTexImage2D, он не работает ( текстура получается пустой ):

glTexImage2D(GL_TEXTURE_2D,
             0,
             GL_RGBA,
             texwidth,
             texheight,
             0,
             GL_RGBA,
             GL_UNSIGNED_BYTE,
             bytes
             );

Когда я использую gluBuild2DMipmaps, это работает:

gluBuild2DMipmaps(GL_TEXTURE_2D,
                  3,
                  texwidth,
                  texheight,
                  GL_RGBA,
                  GL_UNSIGNED_BYTE,
                  bytes
                  );

В чем разница между ними и что я делаю не так?

1 Ответ

3 голосов
/ 23 октября 2011

Поскольку он «работает» с gluBuild2DMipmaps, а не с glTexImage2D (текстура черная, я думаю), я думаю, у вас есть текстурный фильтр на основе mipmap для текстуры (который также используется по умолчанию). Попробуйте позвонить

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);  //or maybe GL_NEAREST

Всегда помните, что glTexImage2D устанавливает только изображение для выбранного уровня mipmap (в вашем случае уровень 0), и если вы используете минифицирующий фильтр на основе mipmap (константа с _MIPMAP_ в названии), результаты текстурирование определяется только в том случае, если вы предоставляете изображения для всех уровней mipmap (что для вас делает gluBuild2DMipmaps) или генерируете их автоматически, используя

glTexParameteri(GL_TEXTURE_2D, GL_GENERATE_MIPMAP, GL_TRUE);

перед загрузкой изображения или новее

glGenerateMipmap(GL_TEXTURE_2D);

после того, как это обескуражено Первый требует OpenGL 1.4, а второй, я думаю, требует поддержки FBO, а также представляет собой современный способ создания mipmaps без каких-либо изменений. Эти два способа (особенно последний) также предпочтительнее устаревшей функциональности GLU.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...