OpenGL ES有不同的UV坐标?

时间:2011-12-23 18:46:35

标签: android c++ qt opengl-es

我使用OpenGL ES 1.1进行纹理映射。我一直认为纹理的UV坐标系从左上角开始,然后到右下角。这在android上很好,我已经测试过了。但是,如果我在桌面上用Qt测试它,我的UV坐标系从左下角开始并向右上方。这可以吗?我使用相同的代码来设置OpenGL

glViewport(0, 0, m_screenWidth, m_screenHeight);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();

#ifdef DESKTOP_QT
glOrtho(0, 1, 0, 1, -1, 1);
#else
glOrthof(0, 1, 0, 1, -1, 1);
#endif

glMatrixMode(GL_MODELVIEW);
glLoadIdentity();

另外我想知道,为什么Qt不支持glOrthof并且Android不支持glOrtho?是否有一个在两个框架中都很常见的函数?

2 个答案:

答案 0 :(得分:2)

默认情况下,在OpenGL中,纹理坐标(0,0)对应于纹理的左下角。自从OpenGL存在以来,它一直是(也可能永远是)这样的。

尽管如此,您可以通过更改纹理矩阵或仅将纹理从底部到顶部翻转来更改此约定。

顺便说一句,glOrtho与Qt或Android无关,它是一个OpenGL函数。所以你可能遇到的不是Qt和Android之间的区别,而是桌面OpenGL和OpenGL ES之间的区别。但是,纹理坐标应该从两个版本的左下角开始。

答案 1 :(得分:0)

你怎么知道纹理从左下角开始并向右上方?我从来没有听说过这种纹理贴图方向。