0

OpenGL 固定関数パイプラインは、ビュー空間で照明を計算しますか?

答えが「はい」の場合、スケールが均一でないビュー変換にどのように対処するのでしょうか? 実際、どのようなスケールを組み込んだビュー変換にどのように対処するのでしょうか?

これが true の場合、ビュー スペースをスケーリングすると、ライトから頂点までの距離が異なります。つまり、ビュー マトリックスがスケーリングされると、ポイント ライトの照明強度が変化します。

ワールド空間での照明は、計算されたポイントライトの強度をビュー空間のスケーリングとは無関係にしますが、以下が必要になります。

  1. オブジェクトからワールドへのマトリックスが API に提供されること (ライトの位置がワールド空間で指定される DirectX など)。
  2. 描画時に API がすべてのジオメトリを 2 回変換すること。ワールド空間の頂点でライティングを計算するために、world*view*proj によってクリップ空間に 1 回、ワールドごとに 1 回。

固定機能の照明パイプライン全般について掘り下げることができる追加の背景情報を含む良い回答に対して与えられるポイント。

4

1 に答える 1

4

あなたの質問は、「ビュースペース」と「ポストプロジェクションスペース」の混同から来ていると思います。それらは同じではありません

ビュースペース、またはカメラスペースは、カメラを基準にしたシーンのスペースです。したがって、カメラは原点に座って、-Z軸を見下ろし、+Yを上に向けます。OpenGLの固定機能に関して、カメラスペースは、位置と法線にGL_MODELVIEW行列を掛けた後のスペースです。

ポストプロジェクションスペースは、カメラスペースの値に GL_PROJECTION行列を掛けた後に得られるものです。これが、実際には2つの別個の行列がある理由です。カメラ空間で照明を行い、投影後の位置をラスタライズのために送信します。

OpenGLは、投影後のスペースではライティングを行いません。したがって、アスペクト比、カメラズームなどは、照明に影響を与えません。また、視点が分かれることもありません。

OpenGL固定機能パイプラインはビュースペースの照明を計算しますか?

はい、そうすべきです。

答えが「はい」の場合、不均一なスケールのビュー変換にどのように対処しますか?実際、スケールを組み込んだビュー変換にどのように対処しますか?

スケールを組み込んだモデルから世界への変換に対処するのとまったく同じ方法。

それは単なるマトリックスです。数学は、特定のスケール変換がモデルからワールドへの部分であるか、ワールドからカメラへの部分であるかにかかわらず、どこにあるかを認識も気にしません。重要なのは、スケールが存在することです。または、スキューまたはその他の形式の変換。

また、覚えておいてください。モデルからワールドへの変換は、ワールドからカメラへの変換よりもスケールを使用する可能性がはるかに高くなります。カメラマトリックスのジオメトリを再スケーリングする必要があるよりも、ワールドに適合するようにジオメトリを再スケーリングする必要がある可能性が高くなります。カメラズームやアスペクト比などのスケーリングは、カメラマトリックスではなく、パースペクティブマトリックスの一部です。

これは通常の方法で「対応」します。法線は、モデルからビューへの行列の逆転置によって変換されます。これにより、法線が変更され(完全な開示:これが私のeBookチュートリアルです)、スケーリング後もモデルに適合します。これは、どのスペースにいるかに関係なく必要です。

これが当てはまる場合、ビュースペースをスケーリングすると、ライトから頂点までの距離が異なります。つまり、ビューマトリックスがスケーリングされると、ポイントライトの照明強度が変化します。

... と?すべてのオブジェクトは(単一のシーン内で)同じカメラマトリックスによって変換されるため、すべてのオブジェクトに同じスケールが適用されます。したがって、それらがすべて世界空間で同じスケールにある場合、それらはすべてカメラ空間で同じスケールになります。

だから問題は何ですか?はい、減衰は変化しますが、すべてのオブジェクトで等しく変化します。したがって、減衰係数がこのカメラスペース用に設計されている限り、問題はありません。

于 2012-05-31T12:04:14.407 に答える