Search code examples
three.jsindicesuv-mappingbuffer-geometry

UV-mapping a BufferGeometrys indices in Three.js


I'm having trouble UV mapping each side of a cube. The cube was made as a BufferGeometry where each side is a rotated copy of one side (sort of a working template) and rotated accordingly by applying a quarternion. UVs are copied as well. I'll skip any vertex coordinate I've seen before and rely on indices.

This leaves me with a total of 8 vertices and 12 faces. But I think I'm running short on vertices when I have to set all of my UVs. As obvious on the screenshot I've "correctly" mapped each side of the cube. But the top and bottom is lacking. I don't know how to set the vertex UV top and bottom faces.

Can I in some way apply several UVs on the same vertex depending on which face it is used in or have I completely lost the plot?

I could solve the problem by applying 6 PlaneBufferGeometry but that would leave me with 4*6=24 vertices. That is a whole lot more than 8.

I haven't been able to figure this one out. Either I've complete misunderstood how it works or what I'm trying to accomplish is impossible given my constraints.

enter image description here


Solution

  • With BufferGeometry, vertices can only be reused if all the attributes for that vertex match. Since each corner of the cube has 3 perpendicular normals, there must be 3 copies of that vertex.

    If you have uvs, it is the same issue -- vertices must be duplicated if the uvs are different.

    Study BoxBufferGeometry, which is implemented as "indexed-BufferGeometry".

    three.js r.90