Search code examples
three.jsuv-mapping

Three.js: Set UV of BoxGeometry


I'm wondering if its possible to change the UV map of the Box Geometry to unfolded, like that:

https://upload.wikimedia.org/wikipedia/commons/thumb/e/ea/Cube_map.svg/599px-Cube_map.svg.png

By default the projection is the same on all faces, which is very limiting in my opinion. Or can you recommend another way to use the three.js geometry and use different projections on its faces?

thanks


Solution

  • I found a useful tutorial answering my questions:

    http://www.geofx.com/graphics/nehe-three-js/lessons17-24/lesson17/lesson17.html

    Here is the Code that helped me:

    var face1 = [
    new THREE.Vector2(0, .666),
    new THREE.Vector2(.5, .666),
    new THREE.Vector2(.5, 1),
    new THREE.Vector2(0, 1)];
    
    var face2 = [
    new THREE.Vector2(.5, .666),
    new THREE.Vector2(1, .666),
    new THREE.Vector2(1, 1),
    new THREE.Vector2(.5, 1)];
    
    var face3 = [
    new THREE.Vector2(0, .333),
    new THREE.Vector2(.5, .333),
    new THREE.Vector2(.5, .666),
    new THREE.Vector2(0, .666)];
    
    var face4 = [
    new THREE.Vector2(.5, .333),
    new THREE.Vector2(1, .333),
    new THREE.Vector2(1, .666),
    new THREE.Vector2(.5, .666)];
    
    var face5 = [
    new THREE.Vector2(0, 0),
    new THREE.Vector2(.5, 0),
    new THREE.Vector2(.5, .333),
    new THREE.Vector2(0, .333)];
    
    var face6 = [
    new THREE.Vector2(.5, 0),
    new THREE.Vector2(1, 0),
    new THREE.Vector2(1, .333),
    new THREE.Vector2(.5, .333)];
    

    Then we assign those vectors to the faceVertex coordinates in the BoxGeometry we created.

    geometry.faceVertexUvs[0][0] = [ face1[0], face1[1], face1[3] ];
    geometry.faceVertexUvs[0][1] = [ face1[1], face1[2], face1[3] ];
    
    geometry.faceVertexUvs[0][2] = [ face2[0], face2[1], face2[3] ];
    geometry.faceVertexUvs[0][3] = [ face2[1], face2[2], face2[3] ];
    
    geometry.faceVertexUvs[0][4] = [ face3[0], face3[1], face3[3] ];
    geometry.faceVertexUvs[0][5] = [ face3[1], face3[2], face3[3] ];
    
    geometry.faceVertexUvs[0][6] = [ face4[0], face4[1], face4[3] ];
    geometry.faceVertexUvs[0][7] = [ face4[1], face4[2], face4[3] ];
    
    geometry.faceVertexUvs[0][8] = [ face5[0], face5[1], face5[3] ];
    geometry.faceVertexUvs[0][9] = [ face5[1], face5[2], face5[3] ];
    
    geometry.faceVertexUvs[0][10] = [ face6[0], face6[1], face6[3] ];
    geometry.faceVertexUvs[0][11] = [ face6[1], face6[2], face6[3] ];