我在场景中放置了一些点光源并添加了一些墙(从搅拌机输出)(迷宫型)和地板和天花板(两者都以与墙壁相同的方式从搅拌机输出,并以与墙壁相同的方式编码为三个.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 );
}
答案 0 :(得分:0)
默认情况下,three.js(和webgl)中的曲面不是双面的。因此,您必须小心将灯光放置在场景中的位置和方式。但另外需要注意的是,场景中放置的灯光越多,渲染时间就越长。
说过要么将模型的表面更改为双面(通过向材质添加side: THREE.DoubleSide
轻松完成),或者在场景中添加更多灯光。