Jump to content
  • Advertisement

Archived

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

Gammastrahler

Normal Calculation Fails in some cases...

This topic is 6031 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

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
Advertisement
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

  • Advertisement
×

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

We are the game development community.

Whether you are an indie, hobbyist, AAA developer, or just trying to learn, GameDev.net is the place for you to learn, share, and connect with the games industry. Learn more About Us or sign up!

Sign me up!