Shading by Cube Mapping
拡散反射光と鏡面反射光の計算結果をそれぞれテクスチャーに保存しておいてキューブマッピング + マルチテクスチャーでレンダリングしているだけ。キューブマッピングで使うテクスチャーは自作ツールで生成した。シェーダーは以下の通りすごく単純。特定の条件下では高速化の手法として結構有効かもしれない。
// vertex shader #version 120 varying vec3 N; void main() { gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; N = gl_NormalMatrix * gl_Normal; }
// fragment shader #version 120 uniform samplerCube DiffuseMap; uniform samplerCube SpecularMap; uniform vec3 DiffuseMaterial; uniform vec3 SpecularMaterial; varying vec3 N; void main() { vec3 kd = textureCube(DiffuseMap, N).rgb; vec3 ks = textureCube(SpecularMap, N).rgb; vec3 color = DiffuseMaterial*kd + SpecularMaterial*ks; gl_FragColor = vec4(clamp(color, 0.0, 1.0), 1.0); }