Как сделать так, чтобы OpenGL выбрал ближайший крупный mipmap? - PullRequest
3 голосов
/ 29 февраля 2012

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

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_NEAREST);

OpenGL выбирает ближайшее mipmap в соответствии с размером текста, но если доступны размеры 16 и 32, а я хочу 22, он выбирает 16, что делает его ужасным. Есть ли способ установить его так, чтобы он всегда выбирал ближайший более крупный mipmap?

Я знаю, что могу сделать это при рендеринге текста, чтобы вручную установить уровень mipmap:

glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAX_LOD, (int) log2(1/scale));
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_LOD, (int) log2(1/scale));

Но так ли это эффективно? Разве это не избавляет от необходимости использовать мипмапы полностью? Я мог бы просто сделать разные текстуры и выбрать одну по размеру. Так есть ли лучший способ сделать это?

Ответы [ 2 ]

3 голосов
/ 29 февраля 2012

Вы пробовали GL_LINEAR_MIPMAP_LINEAR в качестве параметра GL_TEXTURE_MIN_FILTER?Он должен смешиваться между двумя ближайшими мипмапами.Это может улучшить внешний вид.

Кроме того, вы можете попробовать использовать расширение texture_lod_bias, которое описано здесь: http://www.opengl.org/registry/specs/EXT/texture_lod_bias.txt

2 голосов
/ 29 февраля 2012

Вы можете использовать GL_TEXTURE_LOD_BIAS для добавления константы к уровню mipmap, что может помочь вам в этом (например, всегда выбирая следующий более высокий уровень mipmap). Тем не менее, это может быть просто, что mipmap-next не идеален для этой ситуации. Если вы всегда показываете свою текстуру в экранном пространстве и точно знаете, как размер шрифта соответствует пикселям на экране, то для вас может быть слишком много мип-карт.

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