# glLight + Direction + GL_POSITION: Can you explain me this?

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

## Recommended Posts

Hi all! I don't understand this: "The initial position is (0, 0, 1, 0); thus, the initial light source is directional, parallel to, and in the direction of the -z axis." From http://linux.die.net/man/3/gllightfv My question is: Why 0,0,1,0 and not 0,0,-1,0 if default direction is -z? Thanks for help.

##### Share on other sites
Look up homogenous coordinates. Basically, a coordinate (x, y, z, w) in 4D homogenous space is equal to (x/w, y/w, z/w) in 3D space. When w=1, you have the 3D subspace of 4D homogenous space which corresponds to 3D space. That is, the point is located at (x/1, y/1, z/1).

Now see what happens as w approaches 0. For w=0.1, the point is (10*x, 10*y, 10*z). For w=0.001, the point is (1000*x, 1000*y, 1000*z). As w approaches 0, the point (x/w, y/w, z/w) approaches a point at infinity in the direction from the origin towards (x, y, z).

Therefore, a light positioned at (0, 0, 1, 0) is located an infinite distance from the origin in the direction (0, 0, 1), which means the light is shining in the direction (0, 0, -1) from infinity towards the origin.

In short, when specifying directional lights, the vector is not the direction of the light. It is the direction towards the light source from the origin.

##### Share on other sites
Quote:
 Original post by Brother BobLook up homogenous coordinates. Basically, a coordinate (x, y, z, w) in 4D homogenous space is equal to (x/w, y/w, z/w) in 3D space. When w=1, you have the 3D subspace of 4D homogenous space which corresponds to 3D space. That is, the point is located at (x/1, y/1, z/1).Now see what happens as w approaches 0. For w=0.1, the point is (10*x, 10*y, 10*z). For w=0.001, the point is (1000*x, 1000*y, 1000*z). As w approaches 0, the point (x/w, y/w, z/w) approaches a point at infinity in the direction from the origin towards (x, y, z).Therefore, a light positioned at (0, 0, 1, 0) is located an infinite distance from the origin in the direction (0, 0, 1), which means the light is shining in the direction (0, 0, -1) from infinity towards the origin.In short, when specifying directional lights, the vector is not the direction of the light. It is the direction towards the light source from the origin.

Very interesting. Thanks a lot.
I guess this works not only for directional lights, but for spot light.

However, spot lights have two directions: Light direction and spot direction.

Is also GL_SPOT_DIRECTION affected by what you said?

Thanks a lot.

##### Share on other sites
No, spotlights have a position and a direction. Position is the same as the other lights. The direction of the spotlight is a direction vector pointing in the direction the spotlight is aimed.

##### Share on other sites
Quote:
 Original post by Brother BobNo, spotlights have a position and a direction. Position is the same as the other lights. The direction of the spotlight is a direction vector pointing in the direction the spotlight is aimed.

Yes, you are right another time.

Thanks a lot for your help.

• 36
• 12
• 10
• 10
• 9
• ### Forum Statistics

• Total Topics
631359
• Total Posts
2999539
×