使用glOrthof的OpenglES多平台屏幕比例解决方案

我正在为iOS,Android和BADA编写一个小型的跨平台游戏引擎。无论屏幕分辨率和比率如何,我都有一个关于将视角设置为一致的问题。使用glOrthof的OpenglES多平台屏幕比例解决方案

我有以下设置为我翻转标准化正投影的正常工作:

glViewport(0, 0, mWidth, mHeight); 

glMatrixMode(GL_PROJECTION);

glOrthof(-1.0, //LEFT

1.0, //RIGHT

-1.0 * mHeight/mWidth, //BOTTOM

1.0 * mHeight/mWidth, //TOP

-2.0, //NEAR

100.0); //FAR

在我的iPhone的,这是好的,我得到世界对象的期望的位置,但在一些Android设备和iPad在保持正确比例时的位置。

所有的网格都是正确的比例,但位置明显改变,所以如果有东西与屏幕底部对齐,则在iPad上呈现时,对象将被部分地从屏幕上画出。

所以问题:

这是正确的,我需要将对象相对于视口的宽度和高度?

或者

是否有建立正交透视这样不管屏幕比的定位将而不损坏世界对象的角度保持恒定的方法?

我从我所知道的和数学的角度思考我做了第二个不是一个选项,因为透视是基于比率定义的。

回答:

iPad和iPhone的屏幕有不同的比例。 iPhone是3:2,iPad是4:3。 Android手机的列表范围太广泛,我不想评论Bada。因此,除非您要在信箱或邮箱中展示您的图像,或者将其展开以使各个设备之间的宽高比发生变化,那么您可见的内部世界的数量将在设备之间发生变化。

当您根据屏幕比例计算顶部和底部时,您已经修复了左侧和右侧参数。因此,您将在每台设备上的屏幕上获得与您的世界完全相同的数量,但垂直数量会发生变化。

如果你的游戏涉及到一台以3d拍摄的照相机,那么你真的可以做很多事情。但既然你说的是与屏幕两侧对齐的东西,我猜摄像机在2D中移动了?

作为一般规则,如果摄像机沿着垂直方向移动,那么您可能希望保留所拥有的东西。您的级别布局恰好是屏幕宽度,将是每个人屏幕的宽度。更宽的设备将能够看到更远或更远的地方,但你去。

如果摄像机沿着水平方向移动,那么您可能需要切换到为顶部和底部提供固定值,并根据纵横比计算左侧和右侧。所以我想这会是:

glOrthof(-1.0 * mWidth/mHeight, //LEFT 

1.0 * mWidth/mHeight, //RIGHT

-1.0 , //BOTTOM

1.0 , //TOP

-2.0, //NEAR

100.0); //FAR

在能够关闭该关闭所有图书馆内的术语,你可能只需要接受一个标志作为逻辑视口宽度是否应该是固定的和高度适应屏幕或高度固定和宽度适应。

以上是 使用glOrthof的OpenglES多平台屏幕比例解决方案 的全部内容, 来源链接: utcz.com/qa/263176.html

回到顶部