Three.js - Using CubeTextureLoader to create a different image on each face of a cube

后端 未结 2 809
借酒劲吻你
借酒劲吻你 2021-01-01 04:17

I\'m trying to create a cube with a different image on each side using CubeTextureLoader. My process is:

  1. Load a cube texture using new THREE
相关标签:
2条回答
  • 2021-01-01 04:43

    THREE.MultiMaterial has also been removed, as described in: https://github.com/mrdoob/three.js/issues/10931

    Now, you can use an array of materials in the mesh constructor instead. For example:

    let cubeGeometry = new THREE.BoxGeometry(1,1,1);
    let loader = new THREE.TextureLoader();
    let materialArray = [
        new THREE.MeshBasicMaterial( { map: loader.load("xpos.png") } ),
        new THREE.MeshBasicMaterial( { map: loader.load("xneg.png") } ),
        new THREE.MeshBasicMaterial( { map: loader.load("ypos.png") } ),
        new THREE.MeshBasicMaterial( { map: loader.load("yneg.png") } ),
        new THREE.MeshBasicMaterial( { map: loader.load("zpos.png") } ),
        new THREE.MeshBasicMaterial( { map: loader.load("zneg.png") } ),
    ];
    let mesh = new THREE.Mesh( cubeGeometry, materialArray );
    
    0 讨论(0)
  • 2021-01-01 04:52

    As Micnil mentioned, CubeTextureLoader is for CubeMap which is used for SkyBox or EnvMap.

    Use MeshFaceMaterial instead.

    var textureLoader = new THREE.TextureLoader();
    
    var texture0 = textureLoader.load( './0.jpg' );
    var texture1 = textureLoader.load( './1.jpg' );
    var texture2 = textureLoader.load( './2.jpg' );
    var texture3 = textureLoader.load( './3.jpg' );
    var texture4 = textureLoader.load( './4.jpg' );
    var texture5 = textureLoader.load( './5.jpg' );
    
    var materials = [
        new THREE.MeshBasicMaterial( { map: texture0 } ),
        new THREE.MeshBasicMaterial( { map: texture1 } ),
        new THREE.MeshBasicMaterial( { map: texture2 } ),
        new THREE.MeshBasicMaterial( { map: texture3 } ),
        new THREE.MeshBasicMaterial( { map: texture4 } ),
        new THREE.MeshBasicMaterial( { map: texture5 } )
    ];
    var faceMaterial = new THREE.MeshFaceMaterial( materials );
    
    var geometry = new THREE.BoxGeometry( 20, 20, 20 );
    var boxMesh = new THREE.Mesh( geometry, faceMaterial );
    
    0 讨论(0)
提交回复
热议问题