2011-08-16 88 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你可能想看看:)