我在XNA项目中使用基元和精灵。我使用这个代码绘制我的原语(摘要,不是我的项目的逐字):
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 :(得分:1)
这是导致问题的另一个问题。我必须使用负y来缩放所有精灵以使它们正确绘制,如msdn社区内容中所述“使用此形式的方法将SpriteBatch映射到所需坐标系时不明显的是负缩放的影响如果你在X轴或Y轴上按一个负数进行缩放(例如,如果你想翻转Y轴以匹配你的游戏坐标),精灵被绘制的多边形会被翻转。过程并得到背面剔除。有必要在同一方向上用负面缩放纹理以获得你期望的结果。“
答案 1 :(得分: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: