我正在尝试获得以下视角:
本质上我正在用一些3D图形做2D游戏,所以我从Matrix.CreateOrthographicOffCenter
切换到Matrix.CreatePerspectiveOffCenter
我绘制了一个原语,通过减少它的z-index,它走得更远,但它总是在(0,0)(左上角)的方向上消失,而消失点应该是中心。
我的变换设置现在看起来像这样((640,360)是屏幕的中心):
basicEffect.Projection = Matrix.CreatePerspectiveOffCenter(0, graphicsDevice.Viewport.Width, graphicsDevice.Viewport.Height, 0, 1, 10);
basicEffect.View = Matrix.Identity * Matrix.CreateLookAt(new Vector3(640, 360, 1), new Vector3(640, 360, 0), new Vector3(0, 1, 0));
basicEffect.World = Matrix.CreateTranslation(0, 0, 0);
我无法将消失点带到屏幕中心。我设法(有点)用CreatePerspective视图做,但我想继续使用CreatePerspectiveOffCenter,因为我可以轻松地将正常的像素位置转换为3D空间。我错过了什么?
答案 0 :(得分:0)
最后我使用了以下内容。如果您正在寻找一种创建具有“2D感觉”的3D视图的解决方案,这可能会派上用场。通过这些翻译,z-index为0与屏幕的宽度和高度完全匹配,消失点位于屏幕的中心。
basicEffect.Projection = Matrix.CreatePerspectiveFieldOfView((float)Math.PI / 2f, 1, 1f / 1000, 1000f);
basicEffect.View = Matrix.CreateLookAt(new Vector3(0, 0, 1f), new Vector3(0, 0, 0), new Vector3(0, 1, 0));
basicEffect.World = Matrix.CreateTranslation(0, 0, 0);