为什么全屏iPhone背景纹理需要32点的y偏移?

时间:2010-08-08 08:15:58

标签: iphone opengl-es textures

我正在使用全屏背景纹理。它存储在512x512 PNG文件中。当使用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 个答案:

答案 0 :(得分:4)

OpenGL上纹理的逻辑原点是纹理的左下角..

您的屏幕高度为480像素,纹理大小为512像素。如果没有偏移,这将不匹配。

要弥补这一点,您必须使用32像素偏移绘制纹理。让我们看看有多少:512-480 ......你猜对了...... 32.这就是你的抵消来源。

您可以通过更改纹理加载代码来将图像对齐到纹理的左上角。之后,在渲染过程中不再需要偏移量。相反,它将移动到您的纹理加载功能。

我有人会这样做,因为纹理只加载一次并且绘制得相当多。它使得难以理解的代码(绘图)更具可读性。并不是说这样的代码很难理解,但我从经验中知道这些代码随着时间的推移会变得混乱和难以理解..

你不会做任何更快的事情 - 这样的改变只对可读性有好处。