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サンプルコード

<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>

おまけ

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

Leave a Comment