All pastes #948728 Raw Edit

Something

public text v1 · immutable
·published 2008-03-19 12:06 UTC
rendered paste body

void OBJ_CalculateNormals(OBJ_Model_t *Model)
{
	unsigned int i, j;
	OBJ_Group_t *group;

	group=Model->groups;

	for(i=0;i<=Model->numvertices;i++)
	{
		Model->normals[3*i]=0.0f;
		Model->normals[3*i+1]=0.0f;
		Model->normals[3*i+2]=0.0f;

	}

	while(group)
	{
		for(i=0;i<group->numtriangles;i++)
		{
			float n[3], v0[3], v1[3];

			v0[0]=Model->vertices[3*Model->triangles[group->triangles[i]].vindices[1]]-Model->vertices[3*Model->triangles[group->triangles[i]].vindices[0]];
			v0[1]=Model->vertices[3*Model->triangles[group->triangles[i]].vindices[1]+1]-Model->vertices[3*Model->triangles[group->triangles[i]].vindices[0]+1];
			v0[2]=Model->vertices[3*Model->triangles[group->triangles[i]].vindices[1]+2]-Model->vertices[3*Model->triangles[group->triangles[i]].vindices[0]+2];

			v1[0]=Model->vertices[3*Model->triangles[group->triangles[i]].vindices[2]]-Model->vertices[3*Model->triangles[group->triangles[i]].vindices[0]];
			v1[1]=Model->vertices[3*Model->triangles[group->triangles[i]].vindices[2]+1]-Model->vertices[3*Model->triangles[group->triangles[i]].vindices[0]+1];
			v1[2]=Model->vertices[3*Model->triangles[group->triangles[i]].vindices[2]+2]-Model->vertices[3*Model->triangles[group->triangles[i]].vindices[0]+2];

			n[0]=(v0[1]*v1[2]-v0[2]*v1[1]);
			n[1]=(v0[2]*v1[0]-v0[0]*v1[2]);
			n[2]=(v0[0]*v1[1]-v0[1]*v1[0]);

			for(j=0;j<3;j++)
			{
				Model->normals[3*Model->triangles[group->triangles[i]].vindices[j]]+=n[0];
				Model->normals[3*Model->triangles[group->triangles[i]].vindices[j]+1]+=n[1];
				Model->normals[3*Model->triangles[group->triangles[i]].vindices[j]+2]+=n[2];
			}
		}

		group=group->next;
	}

	for(i=0;i<=Model->numvertices;i++)
	{
		float mag;

		mag=1/(float)sqrt((Model->normals[3*i]*Model->normals[3*i])+(Model->normals[3*i+1]*Model->normals[3*i+1])+(Model->normals[3*i+2]*Model->normals[3*i+2]));
		Model->normals[3*i]*=mag;
		Model->normals[3*i+1]*=mag;
		Model->normals[3*i+2]*=mag;
	}
}