2011-03-19 79 views
2

我想搭建一個2.5引擎與XNA。基本上,我想在3D背景中顯示2D精靈(主要英雄和其他怪物)。遊戲將成爲一個平臺。 現在,使用精靈上的平移矩陣不會產生在世界空間中平移頂點幾何的相同結果。 我的意思是,如果我申請如何將Sprite和頂點的幾何圖形轉換爲相同的距離?

Matrix.CreateTranslation(new Vector3(viewportWidth/2, viewportHeight/2, 0)); 

精靈將在屏幕的中間轉換(從顯示器左上角原點開始)。但是,如果我將相同的變換應用於世界空間中的立方體,它將轉化得很遠。這並不讓我感到驚訝,但我想要將Sprite和3D對象以相同的距離進行翻譯,忽略所有項目/未預計的coord內容。

謝謝!

回答

1

傳統上有三個矩陣:世界,視圖和項目。

BasicEffect和大多數其他3D效果,只是具有這些矩陣。您可以使用Project來定義點從三維世界投影到二維視口(視區左下角(-1,-1)到右上角(1,1))的投影方式。您可以設置視圖以在世界空間中移動相機。你用World來移動你的模型在世界空間。

SpriteBatch有點不同。它有一個隱含的Project矩陣,它使您的世界空間與視口的客戶端空間(左上角的(0,0)和右下角的(寬度,高度))匹配。您可以將transformMatrix矩陣傳遞給Begin,您通常可以將其視爲像View矩陣。然後你傳遞給Draw(位置,旋轉,比例等)的參數就像World矩陣那樣工作。

如果您需要在SpriteBatch中爲您的世界或項目矩陣做「奇怪」的事情,您可以將這些轉換生成到您的transformMatrix。它可能只涉及一些數學來「撤銷」內置的轉換。

在XNA 4也可以直接在SpriteBatch使用Effect(如BasicEffect),其可以用任意的矩陣(details)提供。

+0

謝謝!我會試一試! – Archedius 2011-03-19 13:56:30

相關問題