我正在XNA的正投影中绘制一些几何图形,用于sidescroller类型的游戏。我想要做的是在透视投影中渲染背景几何。XNA中的透视/正交投影转换?
但是,我明显需要背景几何来与前景“排列”,即如果在透视中,我将3D模型的位置设置为300,30,然后在正交投影中它排成300,30。
有没有办法我可以做到这一点?我一直在寻找世界来筛选投影,但不知道我是否在正确的轨道上。
感谢您的帮助!
我正在XNA的正投影中绘制一些几何图形,用于sidescroller类型的游戏。我想要做的是在透视投影中渲染背景几何。XNA中的透视/正交投影转换?
但是,我明显需要背景几何来与前景“排列”,即如果在透视中,我将3D模型的位置设置为300,30,然后在正交投影中它排成300,30。
有没有办法我可以做到这一点?我一直在寻找世界来筛选投影,但不知道我是否在正确的轨道上。
感谢您的帮助!
嘿,这里躺着怪物......这说起来容易做起来难吗:-)是的,你在世界/屏幕投影的正确轨道上。你需要做的是选择一个“Z”平面,你将渲染所有2D透视投影。那么你所做的就是将你感兴趣的任何给定的点转换到该“Z”平面上来屏幕坐标,并在该点渲染正投影。
乔尔是对的,如果你可以结合2D和3D,这将是理想的。 2D用作正视图,3D用于透视图。 使用多个2d精灵进行正交视图的2D渲染。 对于几何您最好的选择将是,使用矩阵结构的辅助功能..类似的东西,
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;