2

我试图在 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));

有了那个“反思”

spriteBatch.Begin(SpriteSortMode.BackToFront,
                    BlendState.AlphaBlend,
                    null,
                    null,
                    null,
                    null,
                    Camera.Active.GetTransformation);

什么都不画。请帮助并为我的英语感到抱歉:)


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} //好的。它反映了。但是,为什么它不画?

4

1 回答 1

2

使用带有 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));
于 2013-08-27T17:54:49.787 回答