使用Mesh lambert材质的对象在使用three.js渲染图形时未被生成。

7

我刚开始学习three.js,这对我来说完全是新的领域。所以我正在编写一系列的“hello world”脚本。下面的代码是我写的一个生成带有MeshBasicMaterial材质的立方体的脚本(这只是一个博客中给出的教程的完全复制)。

        var scene = new THREE.Scene(); 
        var camera = new THREE.PerspectiveCamera(75, 640/340, 0.1, 1000); 
        var renderer = new THREE.WebGLRenderer(); 

        renderer.setSize(640, 340); 
        document.body.appendChild(renderer.domElement);

        var geometry = new THREE.CubeGeometry(1,1,1); 
        var material = new THREE.MeshBasicMaterial({color: 0xD43001});
        var cube = new THREE.Mesh(geometry, material); 


        scene.add(cube); 
        camera.position.z = 5; 

        var render = function (){

                requestAnimationFrame(render); 

                cube.rotation.x += 0.1; 
                cube.rotation.y += 0.1; 

                renderer.render(scene, camera); 

            };

            render();

上面的脚本生成一个不断旋转的立方体,现在当我改变立方体的材质时,它仍然会不断旋转。
var material = new THREE.MeshBasicMaterial({color: 0xD43001});

to

var material = new THREE.MeshLambertMaterial({color: 0xD43001});

没有显示任何东西。我到底缺了什么?

更新

所以我必须添加一个光源来显示由网格Lambert材质制成的对象。当我添加了一个点光源时,对象就被显示了。

1个回答

5
这是因为MeshBasicMaterial不受光线影响,具有恒定的颜色。 但是,MeshLambertMaterial会对光线作出反应,所以如果没有光线,您将看不到它!MeshPhongMaterial也是如此。

MeshLambertMaterial依赖于光线,而MeshPhongMaterial既依赖于光线又依赖于相机。 - kishore

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接