glViewport在Android和iOS中的不同结果

我刚刚开始使用opengl的跨平台框架(iOS和Android)的渲染器。 当我到视口的东西(这是分裂的东西所需要的),并注意到有一个iOS和Android之间的差异。 这里有两个图像。

Android其实还有另一个小故障。 它似乎包装。

Android四分之一大小的视口

iOS版

iOS四分之一大小的视口

我的问题。 哪两个是正确的? 我没有应用任何转换,而是将绘制的四分音符稍微拉回来。 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有默认设置的东西? 我无言以对

回答那些有同样问题的人的问题。

我使用GLKView,它明显调用每个渲染调用glViewport,重置我刚刚在前一帧中做了什么。 所以如果你使用GLKView,一定要调用glViewport每一帧! …或者滚动你自己的EAGLView来获得我想要的一些真正的控制,我即将。

这看起来像你没有考虑到iOS设备的比例因子。 请记住,最新的iOS设备具有极高的ppi视网膜显示。 你可以在iOS截图的左下angular看到这个神器。 它只显示纹理的底部25%,因为整个视图的比例因子为2。

简而言之,请确保您在iOS上使用scaleFactor ,并在glScalef调用中使用此因子。