Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- [Vertex Shader]
- varying vec3 lightVec;
- varying vec3 eyeVec;
- varying vec2 texCoord;
- attribute vec3 vTangent;
- void main(void)
- {
- gl_Position = ftransform();
- texCoord = gl_MultiTexCoord0.xy;
- vec3 n = normalize(gl_NormalMatrix * gl_Normal);
- vec3 t = normalize(gl_NormalMatrix * vTangent);
- vec3 b = cross(n, t);
- vec3 vVertex = vec3(gl_ModelViewMatrix * gl_Vertex);
- vec3 tmpVec = gl_LightSource[0].position.xyz - vVertex;
- lightVec.x = dot(tmpVec, t);
- lightVec.y = dot(tmpVec, b);
- lightVec.z = dot(tmpVec, n);
- tmpVec = -vVertex;
- eyeVec.x = dot(tmpVec, t);
- eyeVec.y = dot(tmpVec, b);
- eyeVec.z = dot(tmpVec, n);
- }
- [Pixel Shader]
- varying vec3 lightVec;
- varying vec3 eyeVec;
- varying vec2 texCoord;
- uniform sampler2D colorMap;
- uniform sampler2D normalMap;
- uniform float invRadius;
- void main (void)
- {
- float distSqr = dot(lightVec, lightVec);
- float att = clamp(1.0 - invRadius * sqrt(distSqr), 0.0, 1.0);
- vec3 lVec = lightVec * inversesqrt(distSqr);
- vec3 vVec = normalize(eyeVec);
- vec4 base = texture2D(colorMap, texCoord);
- vec3 bump = normalize( texture2D(normalMap, texCoord).xyz * 2.0 - 1.0);
- vec4 vAmbient = gl_LightSource[0].ambient * gl_FrontMaterial.ambient;
- float diffuse = max( dot(lVec, bump), 0.0 );
- vec4 vDiffuse = gl_LightSource[0].diffuse * gl_FrontMaterial.diffuse *
- diffuse;
- float specular = pow(clamp(dot(reflect(-lVec, bump), vVec), 0.0, 1.0),
- gl_FrontMaterial.shininess );
- vec4 vSpecular = gl_LightSource[0].specular * gl_FrontMaterial.specular *
- specular;
- gl_FragColor = ( vAmbient*base +
- vDiffuse*base +
- vSpecular) * att;
- }
- [OpenGL code (JOGL)]
- public void drawModel(GL2 gl)
- {
- ConstructInterleavedArray(gl);
- gl.glEnable(GL2.GL_CULL_FACE);
- gl.glCullFace(GL2.GL_BACK);
- gl.glPolygonMode(GL2.GL_FRONT, GL2.GL_TRIANGLES);
- gl.glActiveTexture(GL2.GL_TEXTURE0);
- texture.enable(gl);
- texture.bind(gl);
- gl.glUniform1i(texture.getTextureObject(gl),0);
- gl.glActiveTexture(GL2.GL_TEXTURE1);
- normalMap.enable(gl);
- normalMap.bind(gl);
- gl.glUniform1i(normalMap.getTextureObject(gl),0);
- gl.glDrawArrays(FaceFormat, 0, PolyCount * FaceMultiplier);
- gl.glDisable(GL2.GL_CULL_FACE);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement