1

(Mac OS X、Cocoa、C/C++、OpenGL,在数学上有些挑战。)

Project 是一款实时 (30fps) 扑克游戏,具有 2D 视图。使用 glOrtho 为正交投影设置 OpenGL 视图;相机总是直视卡片/桌子。迄今为止,它本质上是一个 2D 图像合成引擎。

我的扑克牌是预先构建的纹理(带有 alpha),因此渲染:

glBegin(GL_TRIANGLE_STRIP);
    glTexCoord2f(0.0, 0.0);
    glVertex3d(startDraw_X, startDraw_Y, 0.0);

    glTexCoord2f(1.0, 0.0);
    glVertex3d(endDraw_X, startDraw_Y, 0.0);

    glTexCoord2f(0.0, 1.0);
    glVertex3d(startDraw_X, endDraw_Y, 0.0);

    glTexCoord2f(1.0, 1.0);
    glVertex3d (endDraw_X, endDraw_Y, 0.0);
glEnd();

这很好用,并提供 1:1 像素映射,以获得高图像质量。

问题:我如何(便宜、快速地)使用 OpenGL“翻转”或扭曲我的卡片?旋转部分并不难,但我在透视方面遇到了麻烦。

具体来说,我想到了 iPhone 应用程序(例如音乐)中 UIViews 的水平翻转动作。UIView 将通过水平收缩来翻转,呈现出透视的外观(视图的“后”坐标将垂直收缩。)

感谢您提供任何帮助或提示。

4

2 回答 2

2

不是glOrtho用来设置正交投影,而是用来glFrustum设置透视投影。

于 2010-08-19T03:49:21.033 回答
1

由于您的游戏是 2D 的,我假设它是顶视图相机,对吗?

在这种情况下,您可以将投影矩阵设置为投影矩阵,将您的相机放在桌子的中心,高度合适(> 1.2 x 桌子的宽度,取决于 FoV),并且不更改任何其他内容。

您可能必须将您的卡片(和其他游戏项目)的高度设置为比当前距离桌子更近的高度(因为在 ortho 中,不会看到沿 Z 的 10 米的增量)。

混合正交和透视在技术上是可行的,但我不太看到优势。但是,您的游戏中可能有需要特殊处理的特殊资产……

于 2010-08-19T13:21:31.350 回答