我在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));
的原語得出正確的,但精靈不畫的。我錯過了什麼?我嘗試了很多不同的東西,但似乎沒有任何工作。
感謝您的幫助。不幸的是,我不太明白你的答案。如果我使用basicEffect代碼,則意味着基元不再繪製(因爲它們現在有不正確的轉換),並且由於我沒有更改轉矩陣,所以精靈仍然不繪製。我打算使用其他方法,但是使用XNA 3.1,因此無法將Basiceffect傳遞給spritebatch。據我所知,spritebatch的「相機」是我傳遞給它的transmatrix。我無法單獨設置spritebatch的視圖或投影矩陣。 – blooop
對不起,我忘了指出,如果您要更換相機,還必須更換反轉矩陣。只需在CreateScale中進行縮放(縮小負號) – 2011-09-19 03:07:20
感謝您的幫助,這就是導致此問題的另一個問題。我在另一個答案中提出了完整的解釋,因爲這裏的字符限制太長了。 http://msdn.microsoft.com/en-us/library/ff433701.aspx – blooop