glViewport在Android和iOS中有不同的结果

时间:2012-04-03 18:23:59

标签: android ios opengl-es viewport

我刚开始使用opengl es开发我的跨平台框架(iOS和Android)的渲染器。当我到达视口的东西(分裂屏幕的东西需要)时,注意到iOS和Android之间存在差异。这是两张图片。

的Android 实际上还有另一个小故障。它似乎包装好了。

Android quarter sized viewport

的iOS

iOS quarter size viewport

我的问题。 哪两个是正确的?我没有应用任何转换,但只有一个可以将绘制的四边形拉回来。 glTranslatef(0.0f,0.0f,-5.f);

初始化代码:

glEnable(GL_TEXTURE_2D);
glShadeModel(GL_SMOOTH);            //Enable Smooth Shading
glClearColor(0.f, 0.f, 0.f, 1.0f);  //Black Background
glClearDepthf(1.0f);                    //Depth Buffer Setup
glEnable(GL_DEPTH_TEST);            //Enables Depth Testing
glDepthFunc(GL_LEQUAL);             //The Type Of Depth Testing To Do

//Really Nice Perspective Calculations
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);

视口和项目代码

glViewport(viewportX, viewportY, viewportW, viewportH);.

glEnable(GL_SCISSOR_TEST);
glScissor(viewportX, viewportY, viewportW, viewportH);

glMatrixMode(GL_PROJECTION);
glLoadIdentity();

...最后计算了截头体并设置了glFrustrum。 我也使用过这段代码:

float widthH = width * .1f;
float heightH = height * .1f;
glOrthof(-widthH, widthH, -heightH, heightH, .1f, 100.f);
glScalef(widthH, heightH, 1.f);

也许Android或iOS默认设置了一些东西?我很无能。

2 个答案:

答案 0 :(得分:6)

为那些有同样问题的人回答我自己的问题。

我使用GLKView,它显然在每个渲染调用上调用glViewport,重置我在前一帧中所做的。因此,如果您使用GLKView,请务必每帧调用glViewport! ...或者滚动你自己的EAGLView以获得一些真实的控制,我认为,我即将。

答案 1 :(得分:0)

这看起来好像不考虑iOS设备的比例因子。请记住,最新的iOS设备具有极高ppi的视网膜显示器。您可以在iOS屏幕截图的左下方看到此工件。它仅显示纹理的底部25%,因为整个视图的比例因子为2。

简而言之,请确保您在iOS上考虑scaleFactor,并在glScalef来电中使用此因素。