PDA

View Full Version : Vertex Normals



Elfinitiy
09-12-2011, 10:07 AM
Ok so I have a cube

static const GLfloat vert[] =
{
0.5f, 0.5f, 0.5f, -0.5f, 0.5f, 0.5f, -0.5f, -0.5f, 0.5f, 0.5f, -0.5f, 0.5f,
0.5f, 0.5f, 0.5f, 0.5f, -0.5f, 0.5f, 0.5f, -0.5f, -0.5f, 0.5f, 0.5f, -0.5f,
0.5f, 0.5f, 0.5f, 0.5f, 0.5f, -0.5f, -0.5f, 0.5f, -0.5f, -0.5f, 0.5f, 0.5f,
-0.5f, 0.5f, 0.5f, -0.5f, 0.5f, -0.5f, -0.5f, -0.5f, -0.5f, -0.5f, -0.5f, 0.5f,
-0.5f,-0.5f, -0.5f, 0.5f, -0.5f, -0.5f, 0.5f, -0.5f, 0.5f, -0.5f, -0.5f, 0.5f,
0.5f, -0.5f, -0.5f, -0.5f, -0.5f, -0.5f, -0.5f, 0.5f, -0.5f, 0.5f, 0.5f, -0.5f
};//Quad
and its normals

static const GLfloat norm[] =
{
0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1,
-1, 0, 0, -1, 0, 0, -1, 0, 0, -1, 0, 0,
0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0,
1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0,
0, -1, 0, 0, -1, 0, 0, -1, 0, 0, -1, 0,
0, 0, -1, 0, 0, -1, 0, 0, -1, 0, 0, -1
};
But whenever I look straight down everything turns black.
I think it's Normal problems,but I checked and they seem right.


static GLfloat material_specular[] = {1.0,1.0,1.0,1.0,};
static GLfloat material_shininess = 5.0;
static GLfloat light_position[] = {1.0,1000,1.0,0.0};
static GLfloat light_ambient[] = {1.0,1.0,0.0,1.0};This is lightning parameters,and the Lightning code

void light()
{
glMaterialfv(GL_FRONT,GL_SPECULAR,material_specula r);
glMaterialfv(GL_FRONT,GL_SHININESS,&material_shini ness);

glLightfv(GL_LIGHT0,GL_POSITION,light_position);
glLightfv(GL_LIGHT0,GL_SPECULAR,light_ambient);

glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);


}

http://img705.imageshack.us/img705/6956/whatimean.png (http://imageshack.us/photo/my-images/705/whatimean.png/)

Uploaded with ImageShack.us (http://imageshack.us)

BionicBytes
09-12-2011, 11:14 AM
You can only issue light commands after setting up the modelview matrix.


glLightfv(GL_LIGHT0,GL_POSITION,light_position);
glLightfv(GL_LIGHT0,GL_SPECULAR,light_ambient);

what is value of modelview matrix?

Elfinitiy
09-12-2011, 12:10 PM
How should I look ?
But I called the function after

glMatrixMode(GL_PROJECTION);
GetClientRect(*hWnd,&rc);
glViewport(rc.left,rc.top,rc.right,rc.bottom);
gluPerspective(90,(float)( (float)(rc.right-rc.left)/(float)(rc.bottom-rc.top)), 0.001, 640.0);
glMatrixMode(GL_MODELVIEW);

BionicBytes
09-13-2011, 02:33 AM
yes... but what have you set for the ModelView matrix?
Have you left it at identity? Have you defined your own camera class (inwhich case you will be changing ModelView Matrix)?

You said you were drawing a cube, but all I see is a flat grid/quad. So what's the normal for the surface we are looking at in the picture you posted?

Elfinitiy
09-13-2011, 06:24 AM
void render()
{
glLoadIdentity();

glRotatef(pos::v, 1.0f, 0.0f, 0.0f);
glRotatef(pos::h, 0.0f, 1.0f, 0.0f);
glTranslatef(pos::x - 1.0, pos::y, pos::z - 1.0);

I translate before I draw the cubes,and then put them between Push/Pop Matrix.
That's the top of the cube,normals are
0,1,0 3 times
positive Y a.k.a. Up