2009-08-16 9 views
4

HLSLには行列の乗算がたくさんあり、それらをどのようにどこで使用するのか理解していますが、それらの導出方法や実際の目標についてはわかりません。行列の乗算 - 表示/投影、ワールド/プロジェクションなど

これについて説明しているオンラインリソースがあるのだろうかと疑問に思っていました。私は、ワールドマトリックスに投影マトリックスとワールド+ビューマトリックスを乗算する目的が何であるかについて特に興味があります。

答えて

12

数学的観点から、this wikipedia articleまたはmsdnに情報を得ることができます。

基本的に、3Dモデルを画面にレンダリングするときは、3D空間に散らばった単純な頂点のコレクションから始めます。これらの頂点はすべて、 "オブジェクトスペース"で表される独自の位置を持ちます。つまり、レンダリングされているシーンで意味を持たない座標を持ちますが、同じモデルの一方の頂点ともう一方の頂点の間の関係のみを表現します。 たとえば、モデルの頂点の位置は、-1から1までの範囲にしかなりません(または同様に、モデルの作成方法によって異なります)。

モデルを正しい位置にレンダリングするには、シーンの「実際の」位置にモデルをスケーリングし、回転し、平行移動する必要があります。移動しているこの位置は、 "ワールドスペース"座標で表され、シーン内の頂点間の実際の関係も表します。これを行うには、各頂点の位置にWorld行列を単に乗算します。この行列は、オブジェクトをシーンの正しい位置に表示するために、適用する必要がある平行移動/回転/スケールパラメータを含むように作成する必要があります。

頂点は世界座標で表されますが、頂点は世界座標で表されますが、その位置はではないので、ビューを基準にして正しく表示できません(あなたのカメラ)。したがって、今回は、シーンをレンダリングする視点の位置と向きを反映するView行列を使用してすべてを掛けます。

すべての頂点が正しい位置にありますが、perspectiveをシミュレートするには、すべてをプロジェクションマトリックスで掛けなければなりません。この最後の乗算は、カメラからの距離に基づいて頂点の位置がどのように変化するかを決定します。

最後に、「オブジェクトスペース」の位置から始まるすべての頂点が、スクリーン上の最終位置に移動され、そこでレンダリングされ、ラスタライズされ、次に表示されます。