jit.gl.shader / GLSL でフォグ #maxmsp #jitter #glsl

スクリーンショット 2014-08-05 03.50.41

OpenGL Superbibleのサンプルコードです。

JXS / GLSL

[html]
<jittershader name="mrr-3colored-lights">
<description>
</description>

<language name="glsl" version="1.2">
<program name="vp" type="vertex">
<![CDATA[

#version 120

void main(void)
{
gl_Position = gl_ModelViewProjectionMatrix *gl_Vertex;

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.0;

float NdotL =max(0,dot(N,L));
vec4 diffuse = gl_Color * vec4(NdotL);

float NdotH = max(0,dot(N,H));
vec4 specular = vec4(0);

if(NdotL >0){
specular = vec4(pow ( NdotH,specularExp));
}

gl_FogFragCoord =length(V);
gl_FrontColor = (diffuse + specular);
}
]]>
</program>
<program name="fp" type="fragment">
<![CDATA[

#version 120

void main()
{
const float e = 2.71828;
float fogFactor = pow(0.5 *gl_FogFragCoord,2);
fogFactor = clamp(pow(e,-fogFactor),0,1);

const vec4 fogColor =vec4(0.5,0.5,0.5,0.4);
gl_FragColor = mix(fogColor,gl_Color,fogFactor);
}
]]>
</program>
</language>
</jittershader>
[/html]

Vertex Shaderの方でカメラからの距離を算出しておいて、Fragment Shadreで色を計算する時にFogの方程式を使ってFog量を決めています。

コメントを残す

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