XNA中的透视/正交投影转换?

时间:2010-12-17 17:29:50

标签: graphics windows-phone-7 3d xna projection

我正在XNA中为正面投影绘制一些几何体用于侧面滚轮式游戏。我想要做的是在透视投影中渲染背景几何。

然而,我显然需要背景几何与前景“对齐”,即如果在透视中我将3D模型的位置设置为300,30然后在正交投影中它排列为300,30。

有没有办法可以做到这一点?我一直在调查世界屏幕投影,但不确定我是否在正确的轨道上。

感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

嘿,这里躺着怪物......这说起来容易做起来难以理解:-)是的,你在世界/屏幕投影的正确轨道上。您需要做的是选择一个“Z”平面,您将渲染所有的2d透视投影。然后你要做的是将你对“Z”平面感兴趣的任何给定点转换为屏幕坐标,并在那个位置渲染你的正投影。

答案 1 :(得分:1)

乔尔是对的,如果你能把2d和3d结合起来,那将是理想的选择。 2d用作正交视图,3d用于透视图。 使用多个2d精灵进行2d渲染以取代正交视图。 关于几何,你最好选择使用Matrix结构的辅助函数。比如,

Matrix view = Matrix.CreatePerspective(.......)

和其他类似的静态辅助函数....

http://msdn.microsoft.com/en-us/library/microsoft.xna.framework.matrix_members.aspx

此外,通过缩放,旋转,平移来转换模型,可以通过矩阵结构本身来实现。

Matrix oldWorld = Matrix.CreateWorld(...);

// something happens ; next update

Matrix scaleMat = Matrix.CreateScale(...);
Matrix rotXMat = Matrix.CreateRotationX(...);
Matrix rotYMat = Matrix.CreateRotationY(...);
Matrix rotZMat = Matrix.CreateRotationZ(...);
Matrix translationMat = Matrix.CreateTranslation(...);

Matrix newWorldMat = scaleMat*rotXMat*rotYMat*rotZMat*translationMat*oldWorldMat;