OpenGL ES 1.1 Отображение текста на пиксели с использованием текстурных координат не работает, что я делаю неправильно? - PullRequest
3 голосов
/ 25 июля 2011

EDIT

ОК, этот вопрос старый.

Что я узнал после изучения OpenGL ES и тестирования, так это то, что мой iPhone 4 фактически использовал изображение с двойным разрешением. Если я правильно помню, мне пришлось установить точку шкалы контекста OpenGL равной 2.

Затем изображение выглядит резким.

Надеюсь, это поможет кому-то еще с той же проблемой.

ОРИГИНАЛЬНЫЙ ВОПРОС

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

Среда разработки OpenGL:

iPhone 4
OpenGL ES 1.1
Ширина экрана в портретном режиме = 320 пикселей (ширина экрана UIScreen)
Высота экрана в портретном режиме = 480 пикселей (высота экрана UIScreen)
Ширина изображения текстуры = 480 пикселей (пиксель файла изображения) Высота изображения текстуры = 320 пикселей (пиксель файла изображения)

Ресурсы, которые вы можете скачать:

Проект Xcode: http://www.chewedon.com/OGL.zip
Используемое изображение текстуры: http://img.photobucket.com/albums/v639/Ryu_Kaiser/serah.png

Вопрос:

Я исследовал проблему отображения текселей в пиксели, чтобы окончательно нарисованная текстура была четкой, как в Photoshop, т. Е. Идеальное отображение пикселей между текселями пикселей и текстур.

Я понимаю, что проблема заключается в том, что центры текселей не располагаются поверх центров пикселей. Я также понимаю, что решение этой проблемы заключается в перемещении текселей на половину текселя (или это был пиксель?), Так что тексель будет располагаться прямо сверху.

Я попытался установить свой массив текстурных координат следующим образом:

const GLfloat texCoords[] = 
 {
 0.0 + (0.5 / 480.0), 1.0 + (0.5 / 320.0), 
 1.0 + (0.5 / 480.0), 1.0 + (0.5 / 320.0), 
 0.0 + (0.5 / 480.0), 0.0 + (0.5 / 320.0), 
 1.0 + (0.5 / 480.0), 0.0 + (0.5 / 320.0)
 };

(Точно так же я также пытался установить координаты вершин. Согласно некоторым из прочитанных примеров, они говорят, что вы можете изменить координату текстуры или координату вершин)

Если я запускаю свое приложение, используя координаты текстуры от 0,0 до 1,0, текстура выглядит идеально в симуляторе iPhone, но если я запускаю приложение на моем iPhone, текстура имеет очень небольшое размытие.

Что я делаю не так?

Нужно ли умножать координаты моей текстуры на коэффициент соотношения сторон ширины и высоты экрана?

Я загрузил свой проект Xcode, который использовал для рисования сцены OpenGL и изображения текстуры, которое я использовал (ссылка выше).

Приветствие.

Ответы [ 2 ]

0 голосов
/ 22 августа 2012

явно проблема с передискретизацией текстур.Ваш iphone, вероятно, передискретизирует текстуру до нового размера, n ^ 2.512x512 например.Только когда-либо используйте текстуры, которые имеют степень 2 в измерениях, поскольку это требуется большинству графического оборудования.

0 голосов
/ 27 сентября 2011

В дополнение к тому, что сказал Маркус, вы должны вместо вычитания вычесть половину текселя из 1.0. И сделайте то же самое (добавьте половину к нижней границе, вычтите половину из верхней границы) для позиций вершин. Вы также должны обязательно использовать ширину и высоту текстуры для смещений текселей, а также ширину и высоту экрана для смещений позиций, а не одно для обоих (кроме случаев, когда они равны, конечно). Это должно дать вам идеальное пиксельное наложение текстуры.

...