PointLight只影响一个模型,而不是所有场景

时间:2014-06-23 14:07:07

标签: three.js

我在场景中放置了一些点光源并添加了一些墙(从搅拌机输出)(迷宫型)和地板和天花板(两者都以与墙壁相同的方式从搅拌机输出,并以与墙壁相同的方式编码为三个.js );问题是灯光只影响墙壁,天花板是黑色的,没有任何光线。我错过了什么吗?有人可以解释为什么我会有这种奇怪的行为吗?

答案的答案,但问题不在于双打(或者我可能错误地设置了它)。这是天花板和地板的代码,也许可以帮助找出问题所在(天花板是黑色的,并且没有任何现有光源的证据,并且地板是用相同的光进行纹理化的,就好像有一个环境光):[另一方面,墙壁上的灯光效果很好,光线位置有点乱,但它有效,所以我稍后处理]

function initCeiling () {
    var loader = new THREE.ColladaLoader();
    loader.options.convertUpAxis = true;
    loader.load( 'models/ceiling.dae', function ( collada ) {
        var colladaCeiling = collada.scene.children[0]
        colladaCeiling.name = "ceiling";
        colladaCeiling.material.needsUpdate = true;
        colladaCeiling.material.side = THREE.DoubleSide;
        colladaCeiling.material.wireframe = false;
        colladaCeiling.position.set(0,2.5,0);
        colladaCeiling.scale.set(2,2,2);
        scene.add( colladaCeiling );
        } );
    }

function initFloor () {
    var floorTexture = new THREE.ImageUtils.loadTexture( 'textures/floor.jpg' );
    floorTexture.wrapS = floorTexture.wrapT = THREE.RepeatWrapping; 
    var floorMaterial = new THREE.MeshBasicMaterial( { map: floorTexture, side: THREE.DoubleSide } );
    var floorGeometry = new THREE.PlaneGeometry( 45, 44.5 );
    var floor = new THREE.Mesh( floorGeometry, floorMaterial );
    floor.position.x = 6;
    floor.position.y = -2;
    floor.position.z = -22.25;
    floor.rotation.x = Math.PI / 2;
    scene.add( floor );
    }

1 个答案:

答案 0 :(得分:0)

默认情况下,three.js(和webgl)中的曲面不是双面的。因此,您必须小心将灯光放置在场景中的位置和方式。但另外需要注意的是,场景中放置的灯光越多,渲染时间就越长。

说过要么将模型的表面更改为双面(通过向材质添加side: THREE.DoubleSide轻松完成),或者在场景中添加更多灯光。