i have some trouble with normals.

i have an application drawing lot of quads, for each quads i needs its normal.

so for each quad i have a loop that sounds like this :

glNormal3f(n0,n1,n2);
glVertex3f(i,random,j);
glVertex3f(i+1,random,j);
glVertex3f(i+1,random,j+1);
glVertex3f(i,random,j+1);

glEnd();

it is not exactly like this but it is the meaning .

the problem is that the values of normal is always 0.

what is wrong ?

talking of math i know that a normal for a surface is :

(v0-v1) x (v1-v2)

where v0,v1,v2 are 3 vertices of the surfaces.
in my case they are 3 vertices of my quad.

I recommend calculating the normal as:

N = (v1 - v0) x (v2 - v0)

where ‘x’ means the cross product.

yes, your normal calculation is incorrect. use the right hand rule to remember which vectors to cross for a normal. point fingers of right hand along first vector, curl fingers toward second vector and thumb is your normal. vertices must be in counter-clockwise order for this to work.

EDIT: this was meant for the thread creator, not you T jebus

[This message has been edited by jebus (edited 01-10-2003).]

You can use this function:

void calcNormal(float v,float out)
{ int x,y;
x=0;y=1;z=2;

v1[x]=v[x]-v[x];
v1[y]=v[y]-v[y];
v1[z]=v[z]-v[z];

v2[x]=v[x]-v[x];
v2[y]=v[y]-v[y];
v2[z]=v[z]-v[z];

out[x]=v1[y]*v2[z]-v1[z]*v2[y];
out[y]=v1[z]*v2[x]-v1[x]*v2[z];
out[z]=v1[x]*v2[y]-v1[y]*v2[x];
}