How does webgl-renderer determine which faces are visible?

I read that webgl turns OFF backface culling by default (https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContext/cullFace). Is this also the case for the three.js webgl-renderer?

If this is the case, how does the the webgl-renderer determine which faces are visible? Does it use the normals for that?

Thanks,
Karel

1 Like

A triangles front-facing direction is determined by the winding order of triangle vertices. You can read up more on it here:

https://www.khronos.org/opengl/wiki/Face_Culling

2 Likes

In your reference it also says “By default, face culling is disabled” Is this also the case for the webgl-renderer? It could be that the webgl-renderer turns on culling by default.

The reason I ask this is because with the default settings of three.js I can’t see both sides so there must be some culling mechanism. Is this mechanism the winding order or does it use something like the normals?

WebGL has gl.CULL_FACE disabled by the default.

Three.js enables or disables it depending on the material being rendered. Specifically on the property material.side.

When side is defined as DoubleSide, face culling is disabled.
Otherwise it’s enabled and set to the corresponding correct behavior.

edit: since material.side is by default set to FrontSide, you could say it defaults to
gl.enable( CULL_FACE ) and gl.cullFace( gl.BACK )

4 Likes