Почему полноэкранной фоновой текстуре iPhone требуется смещение по оси y на 32 точки? - PullRequest
1 голос
/ 08 августа 2010

Я использую полноэкранную текстуру фона. Он хранится в файле PNG 512x512. При рендеринге его на экран с помощью glDrawTexfOES по какой-то причине мне нужно добавить 32-точечное смещение по оси Y, чтобы выровнять его по экрану. Почему?

glBindTexture(GL_TEXTURE_2D, backgroundTexture);
int backgroundRectangle[] = { 0, 480, 320, -480 }; // Handle origin at upper left
glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_CROP_RECT_OES, backgroundRectangle);
glColor4f(1, 1, 1, 1);
glDrawTexfOES(0, 32, 1, 320, 480);

1 Ответ

4 голосов
/ 08 августа 2010

Логическое происхождение текстур в OpenGL - это левый нижний угол текстуры.

Ваш экран имеет высоту 480 пикселей, а текстура имеет размер 512 пикселей.Это не будет соответствовать без смещения.

Чтобы компенсировать это, вы должны нарисовать текстуру, используя смещение 32 пикселя.Давайте посмотрим, сколько: 512-480 ... вы догадались ... 32. Вот откуда берется ваше смещение.

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

Я бы, например, сделал это, потому что текстуры загружаются только один раз и прорисовываются совсем немного.Это делает трудный для понимания код (рисование) более читабельным.Не то чтобы такой код сложен для понимания, но по опыту я знаю, что эти коды со временем становятся запутанными и трудными для понимания..

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