Specular Lighting
OpenGL Superbibleのサンプルコードを練習がてら実装してみました。こちらの本は5th Editionも出ているのですが、Maxの対応がOpenGL2.0 / GLSL1.2 までなので、4th Editionを使っています。
JXS / GLSLサンプルコード
[html]
<jittershader name="mrr.specular">
<description>
specular-light
</description>
<language name="glsl" version="1.2">
<program name="vp" type="vertex">
<![CDATA[
#version 120
void main(void)
{
//normal MVP transform
gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
//Lighting
vec3 lightPos = gl_LightSource[0].position.xyz;
vec3 N = normalize(gl_NormalMatrix * gl_Normal);
vec4 V = gl_ModelViewMatrix * gl_Vertex;
vec3 L = normalize(lightPos – V.xyz);
vec3 H = normalize(L + vec3(0,0,1));
const float specularExp = 128.;
//calculate diffuse lighting
float NdotL = max(0,dot(N,L));
gl_FrontColor = gl_Color *vec4(NdotL);
//calculate specular lighting
float NdotH = 0;//max(0.0, dot(N,H));
if(NdotL > 0.0){
NdotH = max(0.0,dot(N,H) * 8.0 – 7.0);
}
gl_TexCoord[0] = vec4(NdotH,0,0,1);
}
]]>
</program>
<program name="fp" type="fragment">
<![CDATA[
#version 120
void main()
{
//add diffuse & specular
gl_FragColor = gl_Color + gl_TexCoord[0];
}
]]>
</program>
</language>
</jittershader>
[/html]