Shading
OpenGLでシェイディング、つまり陰影付けなんだけど、パラメータが多くてちょっとやっかい。
どうやら物体の色は、光源と材質のパラメータによってきまるみたいです。
まぁそりゃ当たり前だけど、光と色ってのがあまり直感的につくれないんだよね。
光っていえば色と強さくらいしかない気がするけど、光の種類というものが存在する。
GL_AMBIENT 環境光。光が直接あたらない部分の照度 えっ(^-^; て思うけど、まぁ室内とかであちこち反射して当たる光を擬似的に表現。
GL_DIFFUSE 拡散光。光があたり、拡散する光。見る角度を変えても変わらない。
GL_SPECULAR 鏡面光。光があたり、反射する光。見る角度によって明るさが変わる。
GL_POSITION 光源の位置
GL_SPOT_DIRECTION 光源の方向
GL_SPOT_EXPONENT 輝度の分布(?)
GL_SPOT_CUTOFF 最大放射角度。スポットの範囲かな
GL_CONSTANT_ATTENUATION 一定減衰
GL_LINEAR_ATTENUATION 線形減衰
GL_QUADRATIC_ATTENUATION 二次減衰
んでもって物体の材質は
GL_AMBIENT 環境光
GL_DIFFUSE 拡散光
GL_SPECULAR 鏡面光
GL_EMISSION 放射輝度
GL_SHININESS 鏡面光の指数
GL_AMBIENT_AND_DIFFUSE 環境光と拡散光
GL_COLOR_INDEXES 環境光、拡散光、鏡面光のカラー指標
光源と材質両方で、光を指定しなきゃいけないのです。もちろん厳密に計算しようと思えばいくらでも理論はでているんだけど、それをPCに計算させるのは無謀。だから、まぁこんな風に誤魔化してつくるしかないわけ。
おそらく、光のパラメータと材質のパラメータの乗算っぽい計算で、拡散やら反射の色が決まってくるみたい。材質が暗くても、0でなければ強い光をあてることで明るくなる。