我正在为iOS,Android和BADA编写一个小型跨平台游戏引擎。无论屏幕分辨率和比例如何,我都有一个关于将视角设置为一致的问题。
我为翻转的标准化正投影进行了以下设置,效果很好:
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上渲染时,对象将部分地从屏幕上拉出。
所以问题是:
这是否正确,我需要相对于视口的宽度和高度放置对象?
或者
是否有一种设置正交透视的方法,这样无论屏幕比例如何,定位都会保持不变,而不会损坏世界物体的视角?
我正在思考我所知道的和我做的数学,第二个不是一个选项,因为透视是基于比率定义的。
答案 0 :(得分:2)
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
就能够在库中关闭所有内容而言,您可能只需要接收一个标志,以确定逻辑视口宽度是否应该固定,高度是否适合屏幕或高度固定和宽度适应。 / p>