jit.gl.shader / GLSL で specular lighting を実装してみた #maxmsp #jitter #glsl

スクリーンショット 2014-08-04 22.09.47

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]

おまけ

スクリーンショット 2014-08-04 21.38.19
法線ベクトルで色を塗ってみました。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です