+1  A: 

In OpenGL you can switch of backface culling for each triangle you draw:

glEnable(GL_CULL_FACE);
glCullFace(GL_FRONT);
// or
glCullFace(GL_BACK);

I think something similar is also possible in Direct3D

Peter Parker
Notice that enabling and disabling backface culling for each triangle separately will be a huge performance drain because it's a serverside state.
Jasper Bekkers
It is possible in Direct3d with IDirect3DDevice9::SetRenderState() call, though as Jaspers pointed out, it is a big hit on performance switching that for each mesh. One could turn off culling once and render all the I-sections at once, two switches shouldn't be a burden.
frgtn
+1  A: 

First off, backface culling doesn't have anything to do with the order in which objects are rendered. Other than that, I'd go for approach B for no particular reason other than that it'll probably look better. Also this object probably isn't more than a hand full of triangles; having hundreds in a scene shouldn't be an issue. If it is, try looking into hardware instancing.

Jasper Bekkers
+1  A: 

If your I-sections don't change that often, load all the sections into one big vertex/index buffer and draw them with a single call. That's the most performant way to draw things, and the graphic card will do a fast job even if you push half a million triangle to it.

Yes, this requires that you duplicate the vertex data for all sections, but that's how D3D9 is intended to be used.

Nils Pipenbrinck
+1  A: 

I would go with A as the distance you would be seeing the B from would be a waste of processing power to draw all those degenerate triangles.

Also I would simply fire them at a z-buffer and allow that to sort it all out.

If it get's too slow then I would start looking at optimizing, but even consumer graphics cards can draw millions of polygons per second.

graham.reeds