C# x轴上的XNA 2D世界反射

C# x轴上的XNA 2D世界反射,c#,xna,2d,transform,C#,Xna,2d,Transform,我试图在x轴上反映我的游戏世界。 我有一个相机,它可以计算变换矩阵: _transform = Matrix.CreateTranslation(new Vector3(-_pos.X, -_pos.Y, 0)) * Matrix.CreateRotationZ(Rotation) *

我试图在x轴上反映我的游戏世界。 我有一个相机,它可以计算变换矩阵:

        _transform =
                    Matrix.CreateTranslation(new Vector3(-_pos.X, -_pos.Y, 0)) *                        
                    Matrix.CreateRotationZ(Rotation) *                        
                    Matrix.CreateScale(Zoom) *
                    Matrix.CreateTranslation(new Vector3(_graphicsDevice.Viewport.Width * 0.5f, _graphicsDevice.Viewport.Height * 0.5f, 0));
它工作得很好,直到我放了一个反射部分:

        _transform = //first try, place here
                    Matrix.CreateTranslation(new Vector3(-_pos.X, -_pos.Y, 0)) *                        
                    Matrix.CreateRotationZ(Rotation) *                        
                    Matrix.CreateScale(Zoom) *
                    Matrix.CreateReflection(new Plane(Vector3.UnitY, 0)) * //here
                    Matrix.CreateTranslation(new Vector3(_graphicsDevice.Viewport.Width * 0.5f, _graphicsDevice.Viewport.Height * 0.5f, 0));
带着那“反思”

什么也不画。 请帮助我,对不起我的英语:)


UPD:我做了一些测试:

var v = new Vector2(0, 10);
var v2 = Vector2.Transform(v, _transform);
没有.CreateReflection v2={X:450 Y:370}

使用.CreateReflection v2={X:450 Y:350}//好的。它被反射了。但是,为什么它不画图呢?

使用X为负数的比例尺应该可以:

    _transform = //first try, place here
                Matrix.CreateTranslation(new Vector3(-_pos.X, -_pos.Y, 0)) *                        
                Matrix.CreateRotationZ(Rotation) *                        
                Matrix.CreateScale(Zoom) *
                Matrix.CreateScale(-1,1,1) * //here
                Matrix.CreateTranslation(new Vector3(_graphicsDevice.Viewport.Width * 0.5f, _graphicsDevice.Viewport.Height * 0.5f, 0));

你是在画原语还是精灵?你能复制你用来画精灵的代码吗?同一个精灵会被反射吗?请看下面的注释1回答谢谢,这是个好主意,但它并没有解决我的问题。我做错了什么?在Game.Update()中,我调用
Camera.Active.Update(游戏时间)//(其中_transform计算)
在Game.Draw()中,我调用
spriteBatch.Begin(SpriteSortMode.BackToFront,BlendState.AlphaBlend,null,null,null,Camera.Active.GetTransformation);foreach(体中的变量体)spriteBatch.DrawCircle(体、位置、半径、20、颜色)DrawCircle扩展中可能存在问题?它使用:
spriteBatch.Draw(像素、点、空值、颜色、角度、矢量2.Zero、新矢量2(长度、厚度),SpriteEffects.None,0)您必须确保每个spritebatch.Begin调用都以摄影机转换为参数完成。。。如果不看更多关于这个问题的代码或屏幕截图,我就不知道该解决什么问题。。。我编辑了应答器,使Scale=(-1,1,1)而不是(-1,0,0),这是非常错误的…您必须将RasterizerState.CullNone添加到spritebatch.Begin
    _transform = //first try, place here
                Matrix.CreateTranslation(new Vector3(-_pos.X, -_pos.Y, 0)) *                        
                Matrix.CreateRotationZ(Rotation) *                        
                Matrix.CreateScale(Zoom) *
                Matrix.CreateScale(-1,1,1) * //here
                Matrix.CreateTranslation(new Vector3(_graphicsDevice.Viewport.Width * 0.5f, _graphicsDevice.Viewport.Height * 0.5f, 0));