After spending far too much time confused as to why nothing was drawing on screen in a recent GameMaker project of mine, I wanted to make very clear notes on my findings.
Obviously, a quick choice if you're worried you'll cull the wrong side of your triangles is to default to showing all of them. A smart choice for folks looking to iterate extra fast.
Not me, I optimize first and ask questions later.
gpu_set_cullmode(cull_noculling)
No culling is fine for testing, but not optimal for a final product, so we "cull" the back sides of triangles to help improve the speed of rendering.
I like to make my 3D models using Blender, export them using the .obj
format, and load them into my games using a script like this one by DragoniteSpam. It should be noted that Blender considers counter-clockwise triangles to be "frontfacing", such that "backface culling" means to cull clockwise triangles.
gpu_set_cullmode(cull_clockwise)
Consequently (and this is the important nugget of knowledge), I've learned that non-3D draw calls such as draw_surface
can also be culled (almost certainly by accident). To avoid this, make sure you only cull counter-clockwise when drawing your HUD or other elements to the screen.
gpu_set_cullmode(cull_counterclockwise)
Hopefully my observations help you on your journey through making 3D games using GameMaker.