おそらく、XNA でこれを行う最も簡単な方法は、 to を渡すMatrix
ことSpriteBatch.Begin
です。これは、使用するオーバーロードです: MSDN (transformMatrix
引数)。
マトリックスBasicEffect
を設定するなどの効果で、未加工の頂点でもこれを行うことができます。World
または、頂点の位置を手動で設定し、おそらく で変換しますVector3.Transform()
。
Matrix.Create*()
必要な変換行列のほとんどは、メソッド ( MSDN )によって提供されます。たとえば、CreateScale
とCreateRotationZ
.
傾斜行列を作成する方法は提供されていません。次のようになります。
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 レンダリングを行うのが最善です。
歪ませるには、頂点を使用して、必要な場所に手動で配置します。