Why do 3D engines primarily use triangles to draw surfaces?

3d

3d Problem Overview


Why are triangles always used for drawing surfaces in 3D? Why not a square or some other shape?

3d Solutions


Solution 1 - 3d

Triangles can never be non-planar; anything with more than 3 points can be non-planar and thus un-renderable unless converted to triangles.

For example: A square is two triangles that are on the same plane, if all the points that make up the square are co-planar. It takes a lot of calculations to make sure all the points are co-planar, thus all polygons that are greater than 3 points are pre-calculated by decimating them into triangles and tested to make sure all the points are co-planar once, instead of on every frame that gets rendered.

Here is good reference about polygon meshes.

Planar Mesh


(source: softimage.com)

Non-Planar Mesh


(source: softimage.com)

and one more example that might make it clearer


(source: autodesk.com)

The non-planar mesh is degenerate and can't be sorted or rendered correctly in any sane manner. Triangles don't have this problem.

Efficiency

Triangles also are very memory efficient and can be sorted, and rendered extremely fast when using Triangle Strips which only need 1 point to be stored for each additional triangle after the first.

http://upload.wikimedia.org/wikipedia/en/0/03/Triangle_Strip.png"/>

and Triangle Fans which is a special case of a Triangle Strip.


(source: codesampler.com)

Solution 2 - 3d

Since 3 points are the minimum necessary to define a planar surface any shape can be simulated using many triangles, and efficient algorithms exist to rapidly paint triangles onto the screen.

Solution 3 - 3d

Basically any complex (surface) structure can be represented as a bunch of triangles. The triangle is the most atomic and primitive geometry. Hence it is used as base for almost anything. Nevertheless most 3D engines provide you with more complex primitives like spheres, cones, cylinders, donuts, whatnot. Check your libraries documentation.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionseymarView Question on Stackoverflow
Solution 1 - 3duser177800View Answer on Stackoverflow
Solution 2 - 3dGeoffView Answer on Stackoverflow
Solution 3 - 3dHyperboreusView Answer on Stackoverflow