1

Photoshop と同じ変換効果を XNA 4 で作成したい: 変換ツールは、一般的に作業しているグラフィックの遠近法をスケーリング、回転、傾斜、および単に歪めるために使用されます。

これは、テクスチャを使用して XNA でやりたいことすべてですhttp://www.tutorial9.net/tutorials/photoshop-tutorials/using-transform-in-photoshop/

スキュー: スキュー変換は、オブジェクトを垂直または水平に傾けます。歪曲: 歪曲変換を使用すると、画像を任意の方向に自由に引き伸ばすことができます。遠近法: 遠近法変換を使用すると、オブジェクトに遠近法を追加できます。オブジェクトのワープ (私が最も興味深い)。

いくつかのチュートリアルやすでに作成されたもので私を助けてくれることを願っています:D、頂点には解決策があると思いますが、多分.

ありがとう。

4

1 に答える 1

2

おそらく、XNA でこれを行う最も簡単な方法は、 to を渡すMatrixことSpriteBatch.Beginです。これは、使用するオーバーロードです: MSDN (transformMatrix引数)。

マトリックスBasicEffectを設定するなどの効果で、未加工の頂点でもこれを行うことができます。Worldまたは、頂点の位置を手動で設定し、おそらく で変換しますVector3.Transform()

Matrix.Create*()必要な変換行列のほとんどは、メソッド ( MSDN )によって提供されます。たとえば、CreateScaleCreateRotationZ.

傾斜行列を作成する方法は提供されていません。次のようになります。

Matrix skew = Matrix.Identity;
skew.M12 = (float)Math.Tan(MathHelper.ToRadians(36.87f));

(つまり、36.87f 度だけ歪曲することです。これは、この古い私の回答から引き離されました。Google を介して、歪曲行列の完全な計算を見つけることができるはずです。)

ワールド空間の原点 (0,0) の周りで変換が行われることに注意してください。たとえば、スプライトの中心を中心にスケーリングする場合は、そのスプライトの中心を原点に移動し、スケールを適用してから、再度移動する必要があります。行列変換を乗算して組み合わせることができます。この例 (未テスト) は、200x200 の画像をその中心に合わせてスケーリングします。

Matrix myMatrix = Matrix.CreateTranslation(-100, -100, 0)
                * Matrix.CreateScale(2f, 0.5f, 1f)
                * Matrix.CreateTranslation(100, 100, 0);

注: 2D であっても、Z 軸を 0 にスケーリングしないでください。

パースペクティブには がありCreatePerspectiveます。これにより、3D シーンを 2D ディスプレイに投影するための特定の種類の行列である射影行列が作成されるため、(たとえば) を設定するときに頂点と共に使用することをお勧めしますBasicEffect.Projection。この場合、適切な 3D レンダリングを行うのが最善です。

歪ませるには、頂点を使用して、必要な場所に手動で配置します。

于 2013-06-03T11:23:50.690 に答える