在使用three.js渲染图形时,不会生成具有网格朗伯材质的对象

时间:2014-01-19 10:29:12

标签: three.js

我刚刚开始学习three.js,这对我来说完全是全新的。所以我正在编写这些系列的hello world kinda scrips。我写了下面的脚本,用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});

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

没有显示任何内容。我错过了什么?

更新

所以我必须添加一个光源来显示由网格朗伯材料制成的物体。当我添加一个点光源时,物体就会显示出来。

1 个答案:

答案 0 :(得分:5)

这是因为MeshBasicMaterial对照明没有反应,但颜色是恒定的。

然而,一个MeshLambertMaterial,做出反应,所以没有光线,你就看不到了! MeshPhongMaterial也是如此。