blah! how to make this red light work...

Started by
14 comments, last by fireking 20 years, 6 months ago

//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?
--FirekingOwner/LeaderFiregames Development &Blackdragon Studios
Advertisement
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!"
i wrote the draw pyramid function my self

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();}
--FirekingOwner/LeaderFiregames Development &Blackdragon Studios
oh, and please dont complain about my (radius/2) stuff, lol... thats just to get this damn thing up and running..
--FirekingOwner/LeaderFiregames Development &Blackdragon Studios
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)
*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?
--FirekingOwner/LeaderFiregames Development &Blackdragon Studios
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..
--FirekingOwner/LeaderFiregames Development &Blackdragon Studios
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
Matt
hhmmm, well im using textures, and that just makes everything full bright (including the inside of the pyramid)...
--FirekingOwner/LeaderFiregames Development &Blackdragon Studios
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.
enum Bool { True, False, FileNotFound };

This topic is closed to new replies.

Advertisement