Triangle strip vs. triangle list, which one is better?

Recently I read that triangle strip is not always better than triangle list. In fact, in some cases it’s even worse than having triangle list.

I knew that the geometries in Three.js have triangle list as default draw mode. For example, THREE.BoxBufferGeometry keeps 12 triangles with 24 vertices.

I’m wondering why Three.js adopts triangle list. Is triangle list generally faster? Or is there a threshold among different use cases?

Since R112, you will only be able to work with simple triangle lists. Read the following PR to understand why the other draw modes were removed: https://github.com/mrdoob/three.js/pull/18041

To make it short, it requires much complexity to fully support all draw modes (e.g. ensure raycasting or wireframes work). Besides, triangle lists are by far the most used draw mode because it’s easy to work with and fast to render. The advantage of triangle strip and fan is that you can safe a certain amount of memory. However, the Khronos Group (the guys who standardize WebGL) actually recommend not use triangle fan because DirectX needs to emulate this primitive in software. And we do not want add more complexity to the engine just because of triangle strips. Hence, we’ve added BufferGeometryUtils.toTrianglesDrawMode() which allows you to convert triangle strips and fans to triangle lists if necessary.

3 Likes

Well, I think removing other draw modes is a good idea, if this is the trend. I had compatible issue when my code uses triangle strip and three.js uses triangle list by default.