HemiMG

10-25-2000, 05:02 AM

Hello,

I realize this has probably been asked a hundred times before (I found the exact question at least once, but unfortunately the solution didn't help me.) I have I function to generate facet normals, which works fabulously. I want to now create per-vertex normals, but that doesn't work. All of the triangles get shaded wierd. The model looks like it is in camoflouge. It's splotchy looking. I have pasted the relevant code below. It really didn't show up well in this forum I don't think, but hopefully that won't matter. GL_SMOOTH is enabled, and the facenormals are calculated and working correctly. I've checked that the faces really do contain the vertex they are supposed to. I really don't konw what else it could be, mathematically this is correct I am fairly certain. The drawing code is just a simple set of calls to glColor, glNormal, glVertex in that order. GL drawing mode is GL_TRIANGLES. Any help would be appreciated.

for (i = 0; i < Object->vertexcount; i++){

numfaces = 0;

tempnorm.x = 0.0;

tempnorm.y = 0.0;

tempnorm.z = 0.0;

for (i2 = 0; i2 < Object->facecount; i2++){

if (Object->vertexlist[i2].a == i | | Object->vertexlist[i2].b == i | | Object->vertexlist[i2].c == i){

numfaces++;

tempnorm.x += facenormals[i2].x;

tempnorm.y += facenormals[i2].y;

tempnorm.z += facenormals[i2].z;

}

}

tempnorm = i3dNormalize(tempnorm.x, tempnorm.y, tempnorm.z);

Object->vertices[i].normal = tempnorm;

}

I realize this has probably been asked a hundred times before (I found the exact question at least once, but unfortunately the solution didn't help me.) I have I function to generate facet normals, which works fabulously. I want to now create per-vertex normals, but that doesn't work. All of the triangles get shaded wierd. The model looks like it is in camoflouge. It's splotchy looking. I have pasted the relevant code below. It really didn't show up well in this forum I don't think, but hopefully that won't matter. GL_SMOOTH is enabled, and the facenormals are calculated and working correctly. I've checked that the faces really do contain the vertex they are supposed to. I really don't konw what else it could be, mathematically this is correct I am fairly certain. The drawing code is just a simple set of calls to glColor, glNormal, glVertex in that order. GL drawing mode is GL_TRIANGLES. Any help would be appreciated.

for (i = 0; i < Object->vertexcount; i++){

numfaces = 0;

tempnorm.x = 0.0;

tempnorm.y = 0.0;

tempnorm.z = 0.0;

for (i2 = 0; i2 < Object->facecount; i2++){

if (Object->vertexlist[i2].a == i | | Object->vertexlist[i2].b == i | | Object->vertexlist[i2].c == i){

numfaces++;

tempnorm.x += facenormals[i2].x;

tempnorm.y += facenormals[i2].y;

tempnorm.z += facenormals[i2].z;

}

}

tempnorm = i3dNormalize(tempnorm.x, tempnorm.y, tempnorm.z);

Object->vertices[i].normal = tempnorm;

}