あなたの質問は、「ビュースペース」と「ポストプロジェクションスペース」の混同から来ていると思います。それらは同じではありません。
ビュースペース、またはカメラスペースは、カメラを基準にしたシーンのスペースです。したがって、カメラは原点に座って、-Z軸を見下ろし、+Yを上に向けます。OpenGLの固定機能に関して、カメラスペースは、位置と法線にGL_MODELVIEW
行列を掛けた後のスペースです。
ポストプロジェクションスペースは、カメラスペースの値に GL_PROJECTION
行列を掛けた後に得られるものです。これが、実際には2つの別個の行列がある理由です。カメラ空間で照明を行い、投影後の位置をラスタライズのために送信します。
OpenGLは、投影後のスペースではライティングを行いません。したがって、アスペクト比、カメラズームなどは、照明に影響を与えません。また、視点が分かれることもありません。
OpenGL固定機能パイプラインはビュースペースの照明を計算しますか?
はい、そうすべきです。
答えが「はい」の場合、不均一なスケールのビュー変換にどのように対処しますか?実際、スケールを組み込んだビュー変換にどのように対処しますか?
スケールを組み込んだモデルから世界への変換に対処するのとまったく同じ方法。
それは単なるマトリックスです。数学は、特定のスケール変換がモデルからワールドへの部分であるか、ワールドからカメラへの部分であるかにかかわらず、どこにあるかを認識も気にしません。重要なのは、スケールが存在することです。または、スキューまたはその他の形式の変換。
また、覚えておいてください。モデルからワールドへの変換は、ワールドからカメラへの変換よりもスケールを使用する可能性がはるかに高くなります。カメラマトリックスのジオメトリを再スケーリングする必要があるよりも、ワールドに適合するようにジオメトリを再スケーリングする必要がある可能性が高くなります。カメラズームやアスペクト比などのスケーリングは、カメラマトリックスではなく、パースペクティブマトリックスの一部です。
これは通常の方法で「対応」します。法線は、モデルからビューへの行列の逆転置によって変換されます。これにより、法線が変更され(完全な開示:これが私のeBookチュートリアルです)、スケーリング後もモデルに適合します。これは、どのスペースにいるかに関係なく必要です。
これが当てはまる場合、ビュースペースをスケーリングすると、ライトから頂点までの距離が異なります。つまり、ビューマトリックスがスケーリングされると、ポイントライトの照明強度が変化します。
... と?すべてのオブジェクトは(単一のシーン内で)同じカメラマトリックスによって変換されるため、すべてのオブジェクトに同じスケールが適用されます。したがって、それらがすべて世界空間で同じスケールにある場合、それらはすべてカメラ空間で同じスケールになります。
だから問題は何ですか?はい、減衰は変化しますが、すべてのオブジェクトで等しく変化します。したがって、減衰係数がこのカメラスペース用に設計されている限り、問題はありません。