我不明白为什么照明在我的代码中不起作用。我下载了一个简单的OBJ。文件以测试OBJLoader,但模型不受影响。在我更多地编辑灯光之前,至少环境照明会起作用。也许是OBJ。模特需要纹理?
var container, stats;
var camera, scene, renderer, controls;
init();
animate();
function init() {
container = document.createElement( 'div' );
document.body.appendChild( container );
scene = new THREE.Scene();
camera = new THREE.PerspectiveCamera( 45, window.innerWidth / window.innerHeight, 1, 2000 );
camera.position.z = 2.5;
scene.add( camera );
controls = new THREE.TrackballControls( camera );
controls.rotateSpeed = 2.0;
controls.zoomSpeed = 1.2;
controls.panSpeed = 0.0;
controls.noZoom = false;
controls.noPan = true;
controls.staticMoving = true;
controls.dynamicDampingFactor = 0.3;
controls.keys = [ 65, 83, 68 ];
controls.addEventListener( 'change', render );
var ambient = new THREE.AmbientLight( 0x020202 );
scene.add( ambient );
directionalLight = new THREE.DirectionalLight( 0xffffff );
directionalLight.position.set( 1, 1, 0.5 ).normalize();
scene.add( directionalLight );
pointLight = new THREE.PointLight( 0xffaa00 );
pointLight.position.set( 0, 0, 0 );
scene.add( pointLight );
sphere = new THREE.SphereGeometry( 100, 16, 8 );
lightMesh = new THREE.Mesh( sphere, new THREE.MeshBasicMaterial( { color: 0xffaa00 } ) );
lightMesh.scale.set( 0.05, 0.05, 0.05 );
lightMesh.position = pointLight.position;
scene.add( lightMesh );
var loader = new THREE.OBJLoader();
loader.load( "originalMeanModel.obj", function ( object ) {
scene.add( object );
} );
renderer = new THREE.WebGLRenderer();
renderer.setSize( window.innerWidth, window.innerHeight );
container.appendChild( renderer.domElement );
}
function animate() {
requestAnimationFrame( animate );
controls.update();
}
function render() {
camera.lookAt( scene.position );
renderer.render( scene, camera );
}
答案 0 :(得分:16)
THREE.js中的MeshBasicMaterial就像一个香椿着色器(适用于silouhette,阴影绘制或线框),并且不受灯光的影响。
尝试使用MeshLambertMaterial或MeshPhongMaterial
答案 1 :(得分:2)
在使用Blender的Three.js导出器时遇到了类似的问题,即使在原始混合器模型中设置了漫反射颜色并且在Three.js代码中添加了环境光,所有内容都显得很暗。事实证明修复是编辑转换后的模型文件的一部分,有一行效果:
"colorAmbient" : [0, 0, 0]
我手动改为
"colorAmbient" : [0.75, 0.75, 0.75]
它到处出现,并解决了这个问题。我提出这个问题是因为我最好的猜测是你遇到了类似的问题。如果没有看到* .obj文件,很难准确诊断问题,但也许在您的模型设置中,您可以尝试更改环境颜色值,而不是漫反射颜色值,这是我们在分配颜色时通常会想到的一个模特。
答案 2 :(得分:0)
如果你几天前遇到像我这样的问题,也许this会帮助你,如果你的obj中没有法线,那肯定是值得关注的地方。
你可以尝试从MeshBasicMaterial
开始,只是为了检查顶点/面是否正常:new THREE.MeshBasicMaterial({ color: 0x999999, wireframe: true, transparent: true, opacity: 0.85 } )
另外,正如多布先生所说,请考虑分享您正在加载的对象。