简体   繁体   English

为什么 Three.js 中的 DirectionalLight 不起作用?

[英]Why doesn't DirectionalLight in three.js work?

I was doing a ring in three.js .我在Three.js做一个戒指。 I've needed to add camera and lighting.我需要添加相机和照明。 Camera work is ok, but I've got the problem with lighting.相机工作正常,但我遇到了照明问题。 Here is my code:这是我的代码:

<script src="three.js"></script>
<script src="https://threejs.org/examples/js/controls/OrbitControls.js"></script>
<script src="https://threejsfundamentals.org/threejs/../3rdparty/dat.gui.module.js"></script>
<script>

        const scene = new THREE.Scene();

        const camera = new THREE.PerspectiveCamera( 75, window.innerWidth / window.innerHeight, 0.1, 1000 );
        const renderer = new THREE.WebGLRenderer();
        renderer.setSize( window.innerWidth, window.innerHeight );

        const color = 0xFFFFFF;
        const intensity = 1;
        const light = new THREE.DirectionalLight(color, intensity);
        light.position.set(10, 10, 10);
        light.target.position.set(-5, 0, 0);
        scene.add(light);
        scene.add(light.target);

        document.body.appendChild( renderer.domElement );

        let controls = new THREE.OrbitControls(camera, renderer.domElement);
        controls.target.set(0, 0, 0);
        controls.rotateSpeed = 0.5;
        controls.update();

        camera.position.z = 5;

        const geometry = new THREE.RingGeometry( 1, 3, 32 );
        const material = new THREE.MeshBasicMaterial( { color: 0xffff00, side: THREE.DoubleSide } );
        const mesh = new THREE.Mesh( geometry, material );
        mesh.receiveShadow = true;
        mesh.castShadow = true
        scene.add( mesh );

        function animate() {
            requestAnimationFrame( animate );
            mesh.rotation.x += 0.01;
            mesh.rotation.y += 0.01;
            renderer.render( scene, camera );
        }
        animate();

</script>

I've tried to change DirectionalLight to AmbientLight and SpotLight , but they all didn't work either.我尝试将DirectionalLight更改为AmbientLightSpotLight ,但它们也都不起作用。 It doesn't matter for me what kind of the light it would be, I've just need to show my 3d shape.对我来说它是什么样的光并不重要,我只需要展示我的 3d 形状。

MeshBasicMaterial is not affected by lights.MeshBasicMaterial不受灯光影响。 You have to use a different material.你必须使用不同的材料。 Use a MeshPhongMaterial , that the Blinn-Phong model uses for light calculation:使用Blinn-Phong模型用于光计算的MeshPhongMaterial

const material = new THREE.MeshBasicMaterial( { color: 0xffff00, side: THREE.DoubleSide } );

const material = new THREE.MeshPhongMaterial( { color: 0xffff00, side: THREE.DoubleSide } );

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM