KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
Pixel based lighting is a common issue in many OpenGL applications, as the standard OpenGL lighting has very poor quality. I want to use a GLSL program to have per-pixel based lighting in my OpenGL program instead of per-vertex. Just Diffuse lighting, but with fog, texture and texture-alpha at least. I started with this shader : texture.vert: varying vec3 position; varying vec3 normal; void main(void) { gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; gl_FrontColor = gl_Color; gl_TexCoord[0] = gl_MultiTexCoord0; normal = normalize(gl_NormalMatrix * gl_Normal); position = vec3(gl_ModelViewMatrix * gl_Vertex); } texture.frag: uniform sampler2D Texture0; uniform int ActiveLights; varying vec3 position; varying vec3 normal; void main(void) { vec3 lightDir; float attenFactor; vec3 eyeDir = normalize(-position); // camera is at (0,0,0) in ModelView space vec4 lightAmbientDiffuse = vec4(0.0,0.0,0.0,0.0); vec4 lightSpecular = vec4(0.0,0.0,0.0,0.0); // iterate all lights for (int i=0; i<ActiveLights; ++i) { // attenuation and light direction if (gl_LightSource[i].position.w != 0.0) { // positional light source float dist = distance(gl_LightSource[i].position.xyz, position); attenFactor = 1.0/( gl_LightSource[i].constantAttenuation + gl_LightSource[i].linearAttenuation * dist + gl_LightSource[i].quadraticAttenuation * dist * dist ); lightDir = normalize(gl_LightSource[i].position.xyz - position); } else { // directional light source attenFactor = 1.0; lightDir = gl_LightSource[
Tags (comma-separated)
Save Edits
Cancel