#define NUM_VERTS 4225
#define NUM_TRIANGLES 3000
vec3 vertices[NUM_VERTS]; // initialized with your mesh data
int triangles[NUM_TRIANGLES*3]; // initialized with your mesh data, indices into vertices[]
vec3 normals[NUM_VERTS]; // we will be computing this
int numTrisPerNormal[NUM_VERTS];
void ComputeNormals(){
int i;
for(i=0;i<NUM_VERTS;i++){
normals[i] = vec3(0,0,0);
numTrisPerNormal[i]=0;
}
for(i=0;i<NUM_TRIANGLES;i++){
int index0 = triangles[i*3+0];
int index1 = triangles[i*3+1];
int index2 = triangles[i*3+2];
vec3 v0 = vertices[index0];
vec3 v1 = vertices[index1];
vec3 v2 = vertices[index2];
vec3 edge1 = v0 - v1;
vec3 edge2 = v2 - v1; // or is it = v1-v2
vec3 norm = cross(edge1,edge2);
norm.normalize();
normals[i]+=norm;
}
for(i=0;i<NUM_VERTS;i++){
int num = numTrisPerNormal[i];
if(num){
normals[i] /= num;
normals[i].normalize();
}else{
normals[i] = vec3 (0,1,0); // just in case
}
}
}