glViewport在Android和iOS中的不同结果
我刚刚开始使用opengl的跨平台框架(iOS和Android)的渲染器。 当我到视口的东西(这是分裂的东西所需要的),并注意到有一个iOS和Android之间的差异。 这里有两个图像。
Android其实还有另一个小故障。 它似乎包装。
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
调用中使用此因子。