//global
GLfloat LightPosition[] = { 0.0f, 0.0f, 2.0f, 1.0f};
GLfloat LightAmbient[] = { 0.5f, 0.5f, 0.5f, 1.0f};
GLfloat LightDiffuse[] = { 1.0f, 0.0f, 0.0f, 1.0f};
//after initializing open gl
glEnable(GL_LIGHTING);
glLightfv(GL_LIGHT1,GL_AMBIENT,LightAmbient);
glLightfv(GL_LIGHT1,GL_DIFFUSE,LightDiffuse);
glLightfv(GL_LIGHT1,GL_POSITION,LightPosition);
glEnable(GL_LIGHT1);
//frame function
bool Frame()
{
if(keys[VK_ADD]) goy-=0.09f;
if(keys[VK_SUBTRACT]) goy+=0.09f;
if(keys[VK_UP]) goz+=0.09f;
if(keys[VK_DOWN]) goz-=0.09f;
if(keys[VK_LEFT]) gox+=0.09f;
if(keys[VK_RIGHT]) gox-=0.09f;
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
glLightfv( GL_LIGHT1, GL_POSITION, LightPosition );
glBindTexture(GL_TEXTURE_2D,texture[0]);
glTranslatef(gox,goy,goz);
//glRotatef(gox,1.0f,0.0f,0.0f);
glRotatef(angle,0.0f,1.0f,0.0f);
DrawPyramid(0.0f,0.0f,0.0f,2.0f,2.0f);
glTranslatef(2.0f,0.0f,-2.0f);
glRotatef(angle,0.0f,-1.0f,0.0f);
DrawPyramid(0.0f,0.0f,0.0f,2.0f,2.0f);
angle += 1.0f;
SwapBuffers(opengl.GetHDC());
return true;
}
i get a really dark scene, my pyramids are drawn (very faint) and you can slightly make out that the textures are in deed being drawn... you can even see a slight bit of red tint (and i mean VERY slight), but its not REALLY red! and i have it set to 1.0f!!
i can get the pyramids to light up really bright (not red though)if i set the values in ambient to 1000.0f
help?
blah! how to make this red light work...
Does the pyramid have normals? Lighting can''t be calculated without any normals.
-UltimaX-
"You wished for a white christmas... Now go shovel your wishes!"
-UltimaX-
"You wished for a white christmas... Now go shovel your wishes!"
i wrote the draw pyramid function my self
ive changed normals around a lot...
ive changed normals around a lot...
void DrawPyramid(float x,float y,float z,float radius,float height){ glBegin(GL_TRIANGLES); glNormal3f(0.0f,1.0f,1.0f); glTexCoord2f(0.5f,0.0f); glVertex3f(x,y+(height/2),z); glTexCoord2f(1.0f,1.0f); glVertex3f(x+(radius/2),y-(height/2),z+(radius/2)); glTexCoord2f(0.0f,1.0f); glVertex3f(x-(radius/2),y-(height/2),z+(radius/2)); glNormal3f(0.0f,1.0f,-1.0f); glTexCoord2f(0.5f,0.0f); glVertex3f(x,y+(height/2),z); glTexCoord2f(1.0f,1.0f); glVertex3f(x+(radius/2),y-(height/2),z-(radius/2)); glTexCoord2f(0.0f,1.0f); glVertex3f(x-(radius/2),y-(height/2),z-(radius/2)); glNormal3f(-1.0f,1.0f,0.0f); glTexCoord2f(0.5f,0.0f); glVertex3f(x,y+(height/2),z); glTexCoord2f(1.0f,1.0f); glVertex3f(x-(radius/2),y-(height/2),z+(radius/2)); glTexCoord2f(0.0f,1.0f); glVertex3f(x-(radius/2),y-(height/2),z-(radius/2)); glNormal3f(1.0f,1.0f,0.0f); glTexCoord2f(0.5f,0.0f); glVertex3f(x,y+(height/2),z); glTexCoord2f(1.0f,1.0f); glVertex3f(x+(radius/2),y-(height/2),z+(radius/2)); glTexCoord2f(0.0f,1.0f); glVertex3f(x+(radius/2),y-(height/2),z-(radius/2)); glEnd(); glBegin(GL_QUADS); glNormal3f(0.0f,-1.0f,0.0f); glTexCoord2f(1.0f, 1.0f); glVertex3f(x-(radius/2),y-(height/2),z-(radius/2)); glTexCoord2f(0.0f, 1.0f); glVertex3f(x+(radius/2),y-(height/2),z-(radius/2)); glTexCoord2f(0.0f, 0.0f); glVertex3f(x+(radius/2),y-(height/2),z+(radius/2)); glTexCoord2f(1.0f, 0.0f); glVertex3f(x-(radius/2),y-(height/2),z+(radius/2)); glEnd();}
oh, and please dont complain about my (radius/2) stuff, lol... thats just to get this damn thing up and running..
This might help?
I did a quick pyramid in 3DS Max and exported it to see what the normals would be and here's what it uses:
(This is the whole mesh so there's no confusion)
EDIT
Why would I complain about that? If it works then it's fine!
-UltimaX-
"You wished for a white christmas... Now go shovel your wishes!"
[edited by - UltimaX on October 14, 2003 9:42:35 PM]
I did a quick pyramid in 3DS Max and exported it to see what the normals would be and here's what it uses:
(This is the whole mesh so there's no confusion)
*MESH { *TIMEVALUE 0 *MESH_NUMVERTEX 6 *MESH_NUMFACES 8 *MESH_VERTEX_LIST { *MESH_VERTEX 0 0.0000 0.0000 39.4937 *MESH_VERTEX 1 -50.1266 -49.6203 -39.4937 *MESH_VERTEX 2 50.1266 -49.6203 -39.4937 *MESH_VERTEX 3 50.1266 49.6203 -39.4937 *MESH_VERTEX 4 -50.1266 49.6203 -39.4937 *MESH_VERTEX 5 0.0000 0.0000 -39.4937 } *MESH_FACE_LIST { *MESH_FACE 0: A: 0 B: 1 C: 2 AB: 1 BC: 1 CA: 1 *MESH_SMOOTHING 3 *MESH_MTLID 0 *MESH_FACE 1: A: 0 B: 2 C: 3 AB: 1 BC: 1 CA: 1 *MESH_SMOOTHING 2 *MESH_MTLID 0 *MESH_FACE 2: A: 0 B: 3 C: 4 AB: 1 BC: 1 CA: 1 *MESH_SMOOTHING 5 *MESH_MTLID 0 *MESH_FACE 3: A: 0 B: 4 C: 1 AB: 1 BC: 1 CA: 1 *MESH_SMOOTHING 6 *MESH_MTLID 0 *MESH_FACE 4: A: 1 B: 5 C: 2 AB: 1 BC: 1 CA: 1 *MESH_SMOOTHING 4 *MESH_MTLID 0 *MESH_FACE 5: A: 2 B: 5 C: 3 AB: 1 BC: 1 CA: 1 *MESH_SMOOTHING 4 *MESH_MTLID 0 *MESH_FACE 6: A: 3 B: 5 C: 4 AB: 1 BC: 1 CA: 1 *MESH_SMOOTHING 4 *MESH_MTLID 0 *MESH_FACE 7: A: 4 B: 5 C: 1 AB: 1 BC: 1 CA: 1 *MESH_SMOOTHING 4 *MESH_MTLID 0 } *MESH_NUMTVERTEX 0 *MESH_NUMCVERTEX 0 *MESH_NORMALS { *MESH_FACENORMAL 0 0.0000 -0.8468 0.5319 *MESH_VERTEXNORMAL 0 0.0000 -0.8468 0.5319 *MESH_VERTEXNORMAL 1 0.0000 -0.8468 0.5319 *MESH_VERTEXNORMAL 2 0.0000 -0.8468 0.5319 *MESH_FACENORMAL 1 0.8443 0.0000 0.5358 *MESH_VERTEXNORMAL 0 0.8443 0.0000 0.5358 *MESH_VERTEXNORMAL 2 0.8443 0.0000 0.5358 *MESH_VERTEXNORMAL 3 0.8443 0.0000 0.5358 *MESH_FACENORMAL 2 0.0000 0.8468 0.5319 *MESH_VERTEXNORMAL 0 0.0000 0.8468 0.5319 *MESH_VERTEXNORMAL 3 0.0000 0.8468 0.5319 *MESH_VERTEXNORMAL 4 0.0000 0.8468 0.5319 *MESH_FACENORMAL 3 -0.8443 0.0000 0.5358 *MESH_VERTEXNORMAL 0 -0.8443 0.0000 0.5358 *MESH_VERTEXNORMAL 4 -0.8443 0.0000 0.5358 *MESH_VERTEXNORMAL 1 -0.8443 0.0000 0.5358 *MESH_FACENORMAL 4 0.0000 0.0000 -1.0000 *MESH_VERTEXNORMAL 1 0.0000 0.0000 -1.0000 *MESH_VERTEXNORMAL 5 0.0000 0.0000 -1.0000 *MESH_VERTEXNORMAL 2 0.0000 0.0000 -1.0000 *MESH_FACENORMAL 5 0.0000 0.0000 -1.0000 *MESH_VERTEXNORMAL 2 0.0000 0.0000 -1.0000 *MESH_VERTEXNORMAL 5 0.0000 0.0000 -1.0000 *MESH_VERTEXNORMAL 3 0.0000 0.0000 -1.0000 *MESH_FACENORMAL 6 0.0000 0.0000 -1.0000 *MESH_VERTEXNORMAL 3 0.0000 0.0000 -1.0000 *MESH_VERTEXNORMAL 5 0.0000 0.0000 -1.0000 *MESH_VERTEXNORMAL 4 0.0000 0.0000 -1.0000 *MESH_FACENORMAL 7 0.0000 0.0000 -1.0000 *MESH_VERTEXNORMAL 4 0.0000 0.0000 -1.0000 *MESH_VERTEXNORMAL 5 0.0000 0.0000 -1.0000 *MESH_VERTEXNORMAL 1 0.0000 0.0000 -1.0000 } }
EDIT
Why would I complain about that? If it works then it's fine!
-UltimaX-
"You wished for a white christmas... Now go shovel your wishes!"
[edited by - UltimaX on October 14, 2003 9:42:35 PM]
eh scary...
well the thing is, there is an example where this works, (one at game tutorials), but the pyramids aren''t textured, like mine, they are colored...
do i need to have a material?
well the thing is, there is an example where this works, (one at game tutorials), but the pyramids aren''t textured, like mine, they are colored...
do i need to have a material?
actually im pretty sure my normals are correct, i just changed one to opposite (-1) and the red tint wasnt on that face... changed it back, and the red tint was back
something isnt making the light shine on the faces, cuz if i go inside the pyramid, its also not lit...
also, if i use the default light, without changing its parameters (GL_LIGHT0) everything lights correctly, confirming that my normals are ok..
something isnt making the light shine on the faces, cuz if i go inside the pyramid, its also not lit...
also, if i use the default light, without changing its parameters (GL_LIGHT0) everything lights correctly, confirming that my normals are ok..
I think i read somewhere that you need to do
glEnable(GL_COLOR_MATERIAL);
glColorMaterial(GL_FRONT, GL_AMBIENT_AND_DIFFUSE);
for lighting to work with colored objects
Matt
glEnable(GL_COLOR_MATERIAL);
glColorMaterial(GL_FRONT, GL_AMBIENT_AND_DIFFUSE);
for lighting to work with colored objects
Matt
hhmmm, well im using textures, and that just makes everything full bright (including the inside of the pyramid)...
Your light is not a directional light (position.w is != 0). Thus, all the different light fall-off terms will apply. However, you don''t configure them.
Try making the light a normalized vector, with 0 in the w part. That would make the light directional. That, plus enabling COLOR_MATERIAL if you use colors, would probably help. Take a look in the red book, or the OpenGL spec, for the other lighting parameters you may need to set for it to work right.
Try making the light a normalized vector, with 0 in the w part. That would make the light directional. That, plus enabling COLOR_MATERIAL if you use colors, would probably help. Take a look in the red book, or the OpenGL spec, for the other lighting parameters you may need to set for it to work right.
This topic is closed to new replies.
Advertisement
Popular Topics
Advertisement