HLSL には多くの行列乗算があり、それらをどこでどのように使用するかは理解していますが、それらがどのように導出されたのか、または実際の目標が何であるかについてはわかりません。
だから、これを説明するリソースがオンラインにあるかどうか疑問に思っていました.world行列にview行列を掛け、world + view行列に射影行列を掛ける目的は何なのか、特に興味があります.
HLSL には多くの行列乗算があり、それらをどこでどのように使用するかは理解していますが、それらがどのように導出されたのか、または実際の目標が何であるかについてはわかりません。
だから、これを説明するリソースがオンラインにあるかどうか疑問に思っていました.world行列にview行列を掛け、world + view行列に射影行列を掛ける目的は何なのか、特に興味があります.
このウィキペディアの記事またはmsdnで、数学的な観点から情報を得ることができます。
基本的に、3D モデルを画面にレンダリングするときは、3D 空間に点在する頂点の単純なコレクションから始めます。これらの頂点はすべて、「オブジェクト空間」で表現される独自の位置を持っています。つまり、それらは通常、レンダリングされているシーンでは意味を持たない座標を持ちますが、同じモデルの 1 つの頂点と他の頂点の間の関係を表すだけです。たとえば、モデルの頂点の位置は -1 から 1 までの範囲しかありません (モデルの作成方法によって異なります)。
モデルを正しい位置にレンダリングするには、スケール、回転、およびシーン内の「実際の」位置に変換する必要があります。移動先のこの位置は、シーン内の頂点間の実際の関係も表す「ワールド空間」座標で表されます。これを行うには、各頂点の位置をそのワールドマトリックスで乗算するだけです。このマトリックスは、オブジェクトがシーン内の正しい位置に表示されるように、適用する必要がある移動/回転/スケール パラメータを含むように作成する必要があります。
この時点で (すべてのモデルのすべての頂点にワールド マトリックスを乗算した後)、頂点はワールド座標で表されますが、それらの位置が「ビュー」(つまりカメラ) に対して相対的ではないため、頂点を正しくレンダリングすることはできません。そのため、今回は、シーンをレンダリングする視点の位置と方向を反映するビュー マトリックスを使用してすべてを乗算します。
すべての頂点が正しい位置に配置されましたが、遠近法をシミュレートするには、すべてを射影行列で乗算する必要があります。この最後の乗算により、カメラからの距離に基づいて頂点の位置がどのように変化するかが決まります。
そして最後に、すべての頂点が「オブジェクト空間」内の位置から始まる画面上の最終位置に移動され、そこでレンダリング、ラスタライズされてから表示されます。