2010-08-19 89 views
1

(Mac OS X,Cocoa,C/C++,OpenGL,有点数学挑战)在OpenGL中玩扑克牌“3D”旋转 - 透视?

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

我打牌是预先构建的纹理(阿尔法),正是如此呈现:

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“翻转”或扭曲我的卡?旋转部分并不难,但我在透视方面遇到了麻烦。

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

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

回答

2

而不是使用glOrtho建立一个正交投影,使用glFrustum建立一个透视投影。

+0

+1。您可以在您的正射空间的tex tex coords中创建一个假视角扭曲,或者您可以利用已经存在的GL的力量并将其制作为3D。那么这个观点甚至会看起来不错! :) – 2010-08-19 03:50:54

+0

感谢您的帮助球员。通过使用glFrustrum,你的意思是我应该专门为这张一张牌抽签做这件事,然后重新设置为glOrtho以获得其他所有的抽奖? – SirRatty 2010-08-19 04:36:23

+0

考虑到其余的绘图显然非常2D,它可能不会有太大的差别。既然你正在设置和调用'glFrustum'作为它的一部分,我可能会在整个过程中使用它。 – 2010-08-19 04:47:17

0

既然你的游戏是2D的,我认为它是一个顶视图的相机,对吧?

在这种情况下,您可以将投影矩阵设置为投影矩阵,将相机置于桌子的中心,体面高度(根据FoV,表格宽度> 1.2 x),而不会改变其他任何东西。

你可能不得不将自己的牌(和其他游戏物品)的高度距离桌子的距离设置得比他们目前的距离更近(因为在正常情况下,沿着Z方向看不到10米的三角形)。

混合正交和透视在技术上是可行的,但我不太明白这个优点。但是,您可能在游戏中拥有需要特殊处理的特殊资产...