2011-09-18 57 views
0

我在XNA項目中使用了基元和精靈。我畫使用此代碼(一個總結,而不是從我的項目逐字)我的原語:在XNA vs Primitives中使用spritebatch進行負向縮放

transmatrix = Matrix.CreateTranslation(v23(-pos)) * Matrix.CreateScale(scale, -scale, 1f) * Matrix.CreateTranslation(v23(offset)); 
basicEffect.World = transmatrix; 
basicEffect.View = Matrix.CreateLookAt(new Vector3(0.0f, 0.0f, 1.0f), Vector3.Zero, Vector3.Up); 
basicEffect.Projection = Matrix.CreateOrthographicOffCenter(0, (float)GraphicsDevice.Viewport.Width, (float)GraphicsDevice.Viewport.Height, 0, 1.0f, 1000.0f); 
basicEffect.Begin(); 
//draw primitives blah blah 
basicEffect.End(); 
spritebatch.Begin(SpriteBlendMode.None, SpriteSortMode.Immediate, SaveStateMode.None, transmatrix); 
//draw sprites blah blah 
spritebatch.end() 

,如果我有

transmatrix = Matrix.CreateTranslation(v23(-pos)) * Matrix.CreateScale(scale, scale, 1f) * Matrix.CreateTranslation(v23(offset)); 

兩個原語和精靈繪製(但y是反什麼我想要)。 如果我有

transmatrix = Matrix.CreateTranslation(v23(-pos)) * Matrix.CreateScale(scale, -scale, 1f) * Matrix.CreateTranslation(v23(offset)); 

的原語得出正確的,但精靈不畫的。我錯過了什麼?我嘗試了很多不同的東西,但似乎沒有任何工作。

回答

0

SpriteBatch使用自己的參數設置自己的「相機」。要縮放相機,請執行以下操作:

basicEffect.View = Matrix.CreateScale(1.0f, -1.0, 1.0f) * Matrix.CreateLookAt(new Vector3(0.0f, 0.0f, 1.0f), Vector3.Zero, Vector3.Up); 

或者您可以爲spritebatch創建不同的矩陣。

或者,你可以在你的BasicEffect傳遞給SpriteBatch:

http://msdn.microsoft.com/en-us/library/ff433700.aspx

+0

感謝您的幫助。不幸的是,我不太明白你的答案。如果我使用basicEffect代碼,則意味着基元不再繪製(因爲它們現在有不正確的轉換),並且由於我沒有更改轉矩陣,所以精靈仍然不繪製。我打算使用其他方法,但是使用XNA 3.1,因此無法將Basiceffect傳遞給spritebatch。據我所知,spritebatch的「相機」是我傳遞給它的transmatrix。我無法單獨設置spritebatch的視圖或投影矩陣。 – blooop

+0

對不起,我忘了指出,如果您要更換相機,還必須更換反轉矩陣。只需在CreateScale中進行縮放(縮小負號) – 2011-09-19 03:07:20

+0

感謝您的幫助,這就是導致此問題的另一個問題。我在另一個答案中提出了完整的解釋,因爲這裏的字符限制太長了。 http://msdn.microsoft.com/en-us/library/ff433701.aspx – blooop

1

事實證明這是這是導致該問題的另一個問題。我必須縮小所有具有負y的精靈,才能讓它們像msdn社區內容中提到的那樣正確繪製。「使用這種形式的方法將SpriteBatch映射到所需的座標系時,不明顯的是負面縮放如果您在X或Y軸上縮放一個負數(例如,如果您想翻轉Y軸以匹配您的遊戲座標),則精靈所繪製的多邊形將被翻轉處理並進行背面剔除,還需要在同一方向上將負片按比例縮放,以獲得您期望的結果。「

http://msdn.microsoft.com/en-us/library/ff433701.aspx