Culling standard? (CW vs CCW)

Started by
3 comments, last by 21st Century Moose 13 years, 1 month ago
So, I know that, by default, OpenGL culls clockwise-facing (CW) triangles, and Direct3D culls counterclockwise-facing (CCW) triangles. And I know it is largely a matter of preference which culling direction you choose to use in your game.

But is one more "standardized" than the other? For example, importing geometry assets from an external tool (i.e. Maya). Do most external tools use one particular culling direction over another? Or, perhaps, do these tools generally require you to decide on one before each export?

I'm currently using OpenGL, but I always though D3D's culling of CCW faces was more intuitive. However I don't want to decide on one arbitrarily and end up having issues later where I have to edit every mesh I import from an external tool.
Advertisement
This only happens when you don't send normals for your model...

NBA2K, Madden, Maneater, Killing Floor, Sims http://www.pawlowskipinball.com/pinballeternal

Can you explain? Everything I've read so far says culling is done using vertex winding, not normals (i.e. http://www.opengl.or...ki/Face_Culling). I send normals with my geometry, but it has never modified the culling that I've seen.

This only happens when you don't send normals for your model...


No idea what you are on about there.

@OP Yes this can be a pain in the backside if there are different conventions at any part of your toolchain. Exporting a model from Sculptris as an OBJ then importing into MilkShape has a similar problem.

Issues with the graphics API are probably the least significant since you can change the default behaviour in D3D and OpenGL. Equally, I'm sure most of the pro modelling packages have some kind of option for this, although I'm poor so I've never used any of them.
With OpenGL you can change glFrontFace as well as the culling mode and exactly replicate the way D3D does it, so you may as well settle on that as your standard.

Direct3D has need of instancing, but we do not. We have plenty of glVertexAttrib calls.

This topic is closed to new replies.

Advertisement