PDA

View Full Version : Omni light?



CyBBe
05-09-2000, 07:14 AM
How can I create a omni light? And I don't want it to put a new color on my objects, is this possible?
It's kinda hard to get a ball look like a ball without a light... :P

lgrosshennig
05-09-2000, 11:48 AM
Hi there!

Since, I am not a native english speaker (as everybody figured out already http://www.opengl.org/discussion_boards/ubb/biggrin.gif ), I am not really sure If I got it (sorry).

Ever tried a light that only emits a ambient color?

Just a thought,

LG http://www.opengl.org/discussion_boards/ubb/biggrin.gif

CyBBe
05-10-2000, 09:18 AM
No, I haven't but that's what I would like to know how to do...

/me are not from an english speaking country either. :-)

ikrami
05-23-2000, 12:44 PM
hi
i want to know that also?!!
how did they do that?!!!
http://www.opengl.org/discussion_boards/ubb/smile.gif

Eric
05-23-2000, 10:43 PM
OK, here is something that should work :

--------------------------------------------

GLfloat AmbientColor[4]={0.2,0.2,0.2,1}; // Ambient - Grey
GLfloat DiffuseColor[4]={0.2,0,0,1}; // Diffuse - Red
GLfloat SpecularColor[4]={0.0,0.2,0.2,1}; // Specular - Cyan
GLfloat Position[4]={0,0,100,1}; // Light Position at (0,0,100);
/*
Note : the 4th coordinates is !=0 for a positional light
(when you give its actual position !) and 0 for a directional light
(ie : for the sun. A light that is far, far away is directional).
*/

GLfloat Direction[3]={0,0,0}; // Light Direction
/*
Note : the direction is used only when you specify a value which
is not 180 for GL_SPOT_CUTOFF. If you do that, you do not have uniform
lighting anymore. But here, we want an omni light so the direction
is not important...
*/

GLfloat SpotExponent=0;
/*
Note : this specifies how focused is your light beam. But for an
omni light, there is no beam !
*/

GLfloat SpotCutOff=180; // See above //
GLfloat m_ConstantAttenuation=1;
GLfloat m_LinearAttenuation=0;
GLfloat m_QuadraticAttenuation=0;
/*
Note : this means we do not attenuate the light according to
its distance from the light source */

glLightfv(GL_LIGHT0,GL_AMBIENT,AmbientColor);
glLightfv(GL_LIGHT0,GL_DIFFUSE,DiffuseColor);
glLightfv(GL_LIGHT0,GL_SPECULAR,SpecularColor);
glLightfv(GL_LIGHT0,GL_POSITION,m_Position);
glLightfv(GL_LIGHT0,GL_SPOT_EXPONENT,&m_SpotExponent);
glLightfv(GL_LIGHT0,GL_SPOT_CUTOFF,&m_CutOff);
glLightfv(GL_LIGHT0,GL_SPOT_DIRECTION,m_Direction) ;
glLightfv(GL_LIGHT0,GL_CONSTANT_ATTENUATION,&m_ConstantAttenuation);
glLightfv(GL_LIGHT0,GL_LINEAR_ATTENUATION,&m_LinearAttenuation);
glLightfv(GL_LIGHT0,GL_QUADRATIC_ATTENUATION,&m_QuadraticAttenuation);
glEnable(GL_LIGHT0);
glEnable(GL_LIGHTING);

/*Now, if you do not want to assign material to your objects but
want the objects to use what you specify with glColor, you have
to use the following :*/

glColorMaterial(GL_FRONT_AND_BACK,GL_AMBIENT_AND_D IFFUSE);

/* This means that the Ambient and Diffuse material will use the
values specified by glColor. Otherwise, you have to use glMaterial.
Note that there are plenty of different parameters so you should
have a look at glColorMaterial function in your docs. */

glEnable(GL_COLOR_MATERIAL);

/* This enable the Color Material mode we specified above */

------------------------------------------

I hope I did not forget anything.

It was a real pain for me to understand OpenGL lights when I started so I really know what you are feeling.

Nevertheless, after some practice on simple things, you should be able to do whatever you want with the lights.

Have fun and do not hesitate to contact me if this code does not work.

Best regards.

Eric

Kaeto
05-24-2000, 12:40 PM
From what I get from your post, CyBBe, you're looking for a directional light... That will light up the whole scence, kinda like (as Eric said) sunlight. A positional light is like a lightbulb. The farther an object is from it, the dimmer it is. A directional light should be quite a bit faster than a positional one... Hopefully this is understandable... http://www.opengl.org/discussion_boards/ubb/smile.gif