Sign in to follow this  

Lighting Isn't Working (solved)

This topic is 4730 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

Greetings I am working on my heightmapper(again) and right now when I enable lighting, I get a really dark terrain. You can see the terrain but it is almost completly black. If I turn off the lighting I can see it again.
// CALCULATE THE NORMAL FOR THE SURFACE
				// Bottom Right
				p1.Set((startX + x + 1) * scale, vertices[(y + 1) * width + x + 1] * yScale,
					(startY + y + 1) * scale);
				// Top Right
				p2.Set((startX + x + 1) * scale, vertices[y * width + x + 1] * yScale, 
					(startY + y )* scale);
				// Bottom left
				p3.Set((startX + x) * scale, vertices[(y + 1) * width + x] * yScale,
					(startY + y + 1) * scale);
				v1 = p2 - p1;
				v2 = p3 - p1;
				normal = v1.CrossProudct(v2);
				normal.Normalize();
				glNormal3f(normal.x, normal.y, normal.z);


Thats What I use to calculate the normal for each triangle. I have another topic in the math forum if you wish to see the code for my vector functions. The light source should be right in front of the camera. but it doesnt show up very strong. If this isn't the problem, I'll post the code for my light class. [Edited by - Darobat on January 2, 2005 1:39:05 PM]

Share this post


Link to post
Share on other sites
Try negating the x, y and z when you call glNormal(). If that makes it all bright, then you wind your cross product the wrong way around, and get a vector pointing down.

Other things that could go wrong include not specifying the light colors right; specifying too much attenuation when not using a directional light; specifying the material colors wrong, etc.

Share this post


Link to post
Share on other sites
If I negate the normals it is still dark.
	light.SetID(GL_LIGHT0);
light.SetPosition(2.0f, 3.0f, 2.0f, 1.0f);
light.SetAmbient(1.0f, 1.0f, 1.0f, 1.0f);
light.SetDiffuse(1.0f, 1.0f, 1.0f, 1.0f);
light.Enable();

Thats How I turn on the lighting. The functions pretty much do exactly what is there. CLight::SetPosition() sets a float[4] with the vars passed to it and then calls glLightfv(). ID just sets a var with the lights ID. CLight::Enable() just turns on lighting and enables id.

Share this post


Link to post
Share on other sites
LMFAO! I'm kicking myselft now. When I set the ID for the light, I set it with
_id = _id;
rather than
id = _id;
So I was esentailly giving the light no ID. It works now.

Share this post


Link to post
Share on other sites

This topic is 4730 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this