The disadvantage with this is that different meshes talking to each other about visibility becomes tricky, but it can be done. For instance, if a monster model is checking to see if it is visible, it might need to check the list of convex sectors maintained by the world to see if the one it is in is visible. At the moment, the only two model types I have thought of are PolygonMesh and Curve. Primitives are very important objects, as it is they who get sent to the renderer for transformation and rasterization. A primitive knows how to submit a list of triangles approximating itself to the rasterizer, knows via a flag whether it is currently deemed to be visible, contains renderstate information regarding it's appearence, defines its geometry in local space, and maintains a transformed version of itself in whatever space it is currently in.
Primitives are curves and faces at the moment.
I'm tired, so I won't write any more at the moment. But there is a lot more to describe. This document may not be reproduced in any way without explicit permission from the author and flipCode . All Rights Reserved. Best viewed at a high resolution.