在Android和iOS中glViewport的结果不同

4
我刚开始为我的跨平台框架(iOS和Android)使用opengl es开发渲染器。当我处理视口问题(这对于分屏很重要)时,我注意到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个回答

7
回答我自己的问题,为了那些有同样问题的人提供帮助。
我使用GLKView,它显然在每次渲染调用时调用glViewport,重置了我在上一帧中刚刚做的内容。因此,如果您使用GLKView,请确保每帧都调用glViewport!...或制作自己的EAGLView以获得一些真正的控制,我想,我就快这么做了。

0

看起来你没有考虑 iOS 设备的缩放因子。请记住,最近的 iOS 设备都有视网膜显示屏,像素密度极高。你可以在 iOS 截图的左下角看到这种现象。它只显示了纹理的底部 25%,因为整个视图的缩放因子是 2。

简而言之,在 iOS 上确保你考虑了 scaleFactor,并在 glScalef 调用中使用该因子。


我正在使用没有视网膜显示器的iPhone模拟器。iOS版本看起来与我的应用程序版本完全相同,视口为(1,1)。我将添加一个全屏视口的图像。四边形仍然居中于屏幕而不是视口,就像Android版本一样。缩放无法解决这个问题。 - WoutervD
模拟器将伪装成视网膜屏幕。这个问题显然是一个缩放问题。仔细检查两个图形,看到iOS版本被缩放了+200%。 - Sam
非常奇怪。我之前也使用了剪刀测试,这种方法有点隐藏了真正的问题。glViewport根本不起作用,至少在我使用它的地方不起作用。现在它已经正常工作了。还有一些glClear的问题,但我很快就会解决它们。还是谢谢你指出了缩放的问题。因为iOS给我提供的尺寸是480、320,即使开启了视网膜显示。这是一个问题。问题是,如果我不考虑视网膜显示,东西会变小。似乎我应该使用其他方法来获取正确的分辨率...或者自己进行乘法运算。self.view.bounds.size.width, self.view.bounds.size.height - WoutervD
没问题。我认为在您的代码中进行乘法运算肯定是一种选择,但我相信有更好的替代方案。请查看此链接,您可能会找到您要寻找的内容。http://developer.apple.com/library/ios/#documentation/2DDrawing/Conceptual/DrawingPrintingiOS/SupportingHiResScreens/SupportingHiResScreens.html - Sam

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接