I want to draw some light from an object (sphere in my case, its a pole with a handle and sphere on the top).
The light should draw on the other objects too but from the only sphere as I mentioned.
Currently, I am only getting ambient light only.
I have set the L key to show lightning but it only shows ambient light(darkens the scene) when I press the key.
here is the code
/// Lights
float ambientLight[4] = { 0.35f, 0.35f, 0.35f, 1.0f }; // colour
float ambientLightOff[4] = { 0.0f, 0.0f, 0.0f, 1.0f }; // colour
float sunLightPos[4] = { 6.f, 15.5f, 5.0f, 0.0f }; // distant above
float sunLightDif[4] = { 0.8f,0.8f,0.8f,0.8f };
float sunLightSpec[4] = { 0.8f,0.8f,0.8f,0.8f }; // colour
float sunLightAmb[4] = { 0.1f,0.1f,0.1f,0.0f }; // colour
// materials
float wooddif1[] = { 0.647059f, 0.164706f, 0.164706f , 1.0f };
float woodamb1[] = { 0.41f, 0.164706f, 0.164706f, 1.0f };
float woodspe1[] = { 0.547059f, 0.364706f, 0.264706f, 1.0f };
float woodshiny1 = 60;
bool showNormals = TRUE;
bool lighting = false;
bool texture = false;
bool ambientlighting = true;
bool sunlighting = false;
bool buildinglighting = false;
static GLfloat lightIntensity = 0.5;
bool whereLights = true;
void drawpole()
{
glColor3f(0.5f, 0.35f, 0.05f);
glTranslatef(0, 1, 0);
drawCylinder3();
glColor3f(0.5f, 0.35f, 0.05f);
glTranslatef(0, 1, 0);
drawCylinder3();
glPushMatrix();
//glTranslatef(light2Pos[0],0, light2Pos[2]);
//glTranslatef(25, 0, 13);
glColor3f(0.3, 0.4, 0.1);
if (lighting) { setMaterial(4); }
drawSphere();
glPopMatrix();
}
void setLights()
{
if (lighting)
{
glEnable(GL_LIGHTING);
glEnable(GL_NORMALIZE);
//setShademodel();
}
else glDisable(GL_LIGHTING);
if (sunlighting)
{
}
else glDisable(GL_LIGHT0);
//if (buildinglighting)
if (ambientlighting)
{
}
else
{
}
}
void drawLightPlaces()
{
//draw the lights at position
glDisable(GL_LIGHTING);
if (lighting) glEnable(GL_LIGHTING);
}
Edit (related to comment).
void drawpole()
{
glColor3f(0.5f, 0.35f, 0.05f);
glTranslatef(0, 1, 0);
drawCylinder3();
glColor3f(0.5f, 0.35f, 0.05f);
glTranslatef(0, 1, 0);
drawCylinder3();
glPushMatrix();
glColor3f(0.5f, 0.35f, 0.05f);
if (buildinglighting) {
glDisable(GL_LIGHTING);
glColor3f(1.0, 1.0, 1.0);
setMaterial(4);
}
drawSphere();
glPopMatrix();
}
void setLights()
{
if (lighting)
{
glEnable(GL_LIGHTING);
}
else glDisable(GL_LIGHTING);
if (sunlighting)
{
sunlighting;
}
else glDisable(GL_LIGHT0);
if (buildinglighting)
{
// glLightfv(GL_LIGHT0, GL_POSITION, light_position);
//glLightModeli(GL_LIGHT_MODEL_TWO_SIDE, GL_TRUE);
glShadeModel(GL_SMOOTH);
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
//glEnable(GL_DEPTH_TEST);
}
if (ambientlighting)
{
glEnable(GL_LIGHTING);
glEnable(GL_COLOR_MATERIAL);
glColorMaterial(GL_FRONT_AND_BACK,GL_AMBIENT_AND_DIFFUSE);
glEnable(GL_NORMALIZE);
setShademodel();
//glDisable(GL_LIGHTING);
}
else
{
}
}
float wooddif1[] = { 0.647059f, 0.164706f, 0.164706f , 1.0f };
float woodamb1[] = { 0.41f, 0.164706f, 0.164706f, 1.0f };
float woodspe1[] = { 0.547059f, 0.364706f, 0.264706f, 1.0f };
float woodshiny1 = 60;
void setMaterial(int m) // 1=plane 2= 3=ground 4=wood 5=roof 6=wood2 7=
{
if (m == 1)
{
glMaterialfv(GL_FRONT, GL_AMBIENT, woodamb1);
glMaterialfv(GL_FRONT, GL_DIFFUSE, wooddif1);
glMaterialfv(GL_FRONT, GL_SPECULAR, woodspe1);
glMaterialf(GL_FRONT, GL_SHININESS, woodshiny1);
}
if (m == 2) // 2
{
}
}
A wild guess: the
glEnable(GL_LIGHT0)
is missing in your code (at least in the posted part).Just in case, the
glLightModeli(GL_LIGHT_MODEL_TWO_SIDE, GL_TRUE);
might also be useful to be sure that back-facing triangles are lit.After that, the GL_SHININESS and GL_SPECULAR parameters should be tweaked to get this kind of highlights.