# Normals Calc

This way to calc normals is the correct way?

typedef struct fvect{
float x;
float y;
float z;
};

fvect cnormal(fvect vert_1,fvect vert_2)
{
/*
Produto vetorial: <v1,v2,v3> e <u1,u2,u3> = <a, b, c> onde:
a = (v2u3)-(v3u2)
b = -(v1u3)+(u1v3)
c = (v1u2)-(v2u1)

Normalização:
len=sqrt(nxnx+nyny+nznz)
if (len>0) {
nx
=(1/len)
ny*=(1/len)
nz*=(1/len)
/
fvect norm;
float len;
norm.x=(vert_1.y
vert_2.z)-(vert_1.zvert_2.y);
norm.y=-(vert_1.x
vert_2.z)+(vert_2.xvert_1.z);
norm.z=(vert_1.x
vert_2.y)-(vert_1.yvert_2.x);
len=sqrt(norm.x
norm.x+norm.ynorm.y+norm.z+norm.z);
if(len>0) {
norm.x
=1/len;
norm.y*=1/len;
norm.z*=1/len;
}
return norm;
}

Doesn’t look too bad to me. But why do you change the sign of the Y component in the normal? The signs should be like in the X and Z component.

[This message has been edited by Bob (edited 02-20-2002).]

Just by the by…

x *= 1/y
is the same as
x /=y

not being picky just the way I do it and you type 2 less characters!

Originally posted by Gavin:
[b]Just by the by…

x *= 1/y
is the same as
x /=y

not being picky just the way I do it and you type 2 less characters! :-)[/b]

yeah and after u used x,y and z as variable names you go on and name your other vars a,b,c… so you need only one character for any variable and not those damn long character names
not too serious but this is just one thing why i hate c/c++ so much

but anybody shall use what (s)he feels comfy with

A division its a liltle slower than a multiplication. This is why im using *=1/len