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);

without .CreateReflection v2 = {X:450 Y:370}
with .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 に答える