When reading 3ds files and calculating face normals based on the assumption that outside is when the vertices are in CCW order, it turns out lots of models I’ve downloaded from the net contain ‘incorrect’ faces.

Is there some way to correct these faces (programmatically) so all normals point in the right direction?
I’ve tried scanning the face list for identical vertex-sequences in different faces and when found reversing the vertex order for one of them, but that is not enough

But how will you know which face is correct and which is incorrect? Could do… find the cofg of the model and then check that all normals a re facing away from this, but this could have obvious problems with concave shapes. Oh well i’ll be buggered if I know.

Originally posted by Gavin: But how will you know which face is correct and which is incorrect?

I know, that is not trivial. I’m assuming the model consists of ‘nice’ surfaces. If that is the case, I’ll be content if I get all normals consitently pointing one way.
Once I get that, I’ll start thinking about detecting what is ‘inside’ and what is ‘outside’.

Thanks harsman. The book looks good to me, even though it has a lot of math to dig through. I’ll certainly give it a shot, but hopefully there are some shortcuts for triangle faces instead of regular polygons…

You don’t actually have to go through the entire document you know The generating normals for polyhedra part is on page 94 in the word version, although it’s part of a larger section that starts on page 91.

Ok I think I found something. Duh! It was in the documents all the time.

The face entries in the 3ds also have a flag word which I ignored until now. The flag word contains three bits that indicate visibility of the directed edges CA, BC and AB. From this I think I can deduce the CW or CCW orientation and calculate the correct normal.