Archived

This topic is now archived and is closed to further replies.

Gammastrahler

Normal Calculation Fails in some cases...

Recommended Posts

Gammastrahler    150
hi, my normal calculation works only fine if i define my vertex data as follows: v[4] = {-1, -1, -1}, {1, -1, -1}, {1, 1, -1}, {-1, 1, -1} but it does not work properly for cases like this one: v[4] = {0, 0, -1}, {2, 0, -1}, {2, 2, -1}, {0, 2, -1} the normal is still perpendicular, but in the opposite direction what the hell should i do? thankful christian

Share this post


Link to post
Share on other sites
Gammastrahler    150
here is the source code for calculatiing the normals:

  
void ReduceToUnit(GLfloat vector[3])
{
float length;

length = (float)sqrt((vector[0]*vector[0]) + (vector[1]*vector[1]) + (vector[2]*vector[2]));

if(length == 0.0f) length = 1.0f;

vector[0] /= length;
vector[1] /= length;
vector[2] /= length;
}

void calcNormal(float v[3][3], float out[3], bool toUnit)
{
float v1[3],v2[3];

static const int x = 0;
static const int y = 1;
static const int z = 2;

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

v2[x] = v[1][x] - v[2][x];
v2[y] = v[1][y] - v[2][y];
v2[z] = v[1][z] - v[2][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];

if (toUnit) ReduceToUnit(out);
}


another question: how can i avoid using the sqrt??
thanks!!

Share this post


Link to post
Share on other sites