我有一个基于图块的游戏,它是一个由转换创建的半等距视图。图块由在3D表面上渲染的Texture2d创建。
地图图片: http://balancedcms.com/Capture.PNG
我正在使用以下代码进行转换:
View = Matrix.CreateLookAt(new Vector3(0, -1.1f, 1.6f), new Vector3(0, 0, 0), new Vector3(0, 53, 0));
Projection = Matrix.CreatePerspectiveFieldOfView(MathHelper.Pi - 2.4f, 4.0f / 3.0f, 1, 500);
quadEffect = new BasicEffect(device);
quadEffect.World = Matrix.Identity;
quadEffect.View = View;
quadEffect.Projection = Projection;
quadEffect.TextureEnabled = true;
quad = new Quad(new Vector3(0, 0, 0), Vector3.Backward, Vector3.Up, 3, 3);
当我尝试获取当前正在将鼠标悬停在鼠标上的图块时,我的问题就出现了。我有一个鼠标X和Y但是我似乎无法弄清楚如何将这些屏幕坐标转换为平铺X和Y.平铺是128px乘128px;但是,在相机变换后,它们在顶部较小而在底部较大(以创建等轴测视图)
我尝试用相同的投影矩阵转换鼠标X和Y.但是,这不起作用。我认为这是由于视图矩阵没有被考虑在内......样本如下:
Vector3.Transform(new Vector3(Mouse.GetState().X, Mouse.GetState().Y, 0), Projection);
此图片可能会提供更多信息......还会显示我已经计算出来的时间: http://balancedcms.com/1111.png
答案 0 :(得分:0)
投影矩阵控制3D图像在2D屏幕上的显示方式,但没有关于相机放置位置或指向的方向,您可能希望至少使用视图矩阵和投影矩阵在某处获得正确的屏幕指向世界点转换。
我实际上无法记住进行此类转换的数学运算,但xna有an unproject method您可能需要查看:)