今日私に起こったことの 1 つは、OpenGL が GL_SHININESS マテリアル コンポーネントを 0.0 から 1.0 の間ではなく、0.0 から 128.0 の間で指定していることです。
私の知る限り、浮動小数点値を使用して指定できる他のすべての値の範囲は 0.0 から 1.0 です。GL_SHININESS との違いの理由は何ですか?
編集:
以下に投稿された新しい回答の私のメモも参照してください。
0.0 から 1.0 の範囲は意味がありません。これは、照明モデルが構築される方法のためです。光沢係数は指数として使用されます。[0.0, 1.0] の範囲の y に対して x^y を上げることは、ライティング モデルではあまり意味がありません。三角余弦関数) 三角分布をこれ以上厳密に制約することはできません。厳密に制約を緩和することしかできません。
私がここで行ったよりもこれをよりよく説明する良い参考文献は次のとおりです。
Interactive Computer Graphics - Angel と Schreiner によるシェーダーベースの OpenGL によるトップダウンアプローチ
OpenGL プログラミング ガイド、バージョン 4.3
以下の回答も非常に有益です。
数年前にこの質問をしたとき、おそらくその後、「値が 0.0 から 1.0 の範囲にないのに、この値が指数の新しい値にマッピングされたのはなぜですか?」と尋ねたと思います。これは別の良い質問です。おそらく、これは指数マップになるでしょう: y = exp(kx), x in [0.0, 1.0]. 答えは「そのように設計されていないため」です。これは「ブラック ボックス」の観点からはより有用かもしれませんが、現実的な材料モデルを実装することを期待して何らかの実験で指数を測定した科学者にとってはあまり有用ではありません。