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

后端 未结 3 1966
鱼传尺愫
鱼传尺愫 2020-12-23 13:37

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

相关标签:
3条回答
  • 2020-12-23 13:49

    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.

    0 讨论(0)
  • 2020-12-23 13:56

    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)

    0 讨论(0)
  • 2020-12-23 14:12

    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.

    0 讨论(0)
提交回复
热议问题