2011-08-16 58 views
2

我有一个基于瓷砖的游戏,处于由变形创建的半等距视图中。这些贴图是通过在3d表面上渲染的Texture2d创建的。来自屏幕位置的XNA瓷砖

地图图片: 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.这些贴砖是128x128px;然而,在相机转换后,它们在顶部较小,在底部较大(以创建等轴视图)

我试过用相同的投影矩阵转换鼠标X和Y.但是,这并没有奏效。我认为这是由于没有考虑到视图矩阵...样本如下:

Vector3.Transform(new Vector3(Mouse.GetState().X, Mouse.GetState().Y, 0), Projection); 

该图像可以提供更多的信息.​​..还显示我已经投入搞清楚了这一点的时间: http://balancedcms.com/1111.png

+0

可能是最好的发布这些问题在一处,然后看看你得到的答案有(或者如果问题被移动),然后交叉发布。 ([这是关于gamedev网站的问题](http://gamedev.stackexchange.com/questions/16062/xna-tile-from-screen-location),如果有人感兴趣的话)。 –

回答

0

投影矩阵控制3D图像在2D屏幕上的显示方式,但没有关于相机放置位置或其指向的方向,您可能希望至少使用投影矩阵在某处的视图矩阵以获得正确的屏幕指向世界点变换。

我不能真正记得做这种变换的数学,但XNA有an unproject method你可能想看看:)