未捕获的TypeError:无法读取属性' setRGB'未定义的

时间:2016-09-15 07:26:27

标签: javascript three.js

我正在关注udacity上关于webgl的一些初学课程。在在线摘录中,他们使用material.ambient表示MeshLambertMaterial。

下面,我尝试从头开始创建一个基本的立方体示例,但是当我尝试用MeshLambertMaterial替换MeshBasicMaterial时,我遇到了试图让多维数据集显示的问题。

为什么没有在材质上定义环境,就像在udacity教程中那样? threejs文档不是很有用,他们甚至没有在材料上提到环境方法...... API是否发生了变化?

var scene = new THREE.Scene();

var camera = new THREE.PerspectiveCamera( 75, window.innerWidth / window.innerHeight, 0.1, 1000 );

var renderer = new THREE.WebGLRenderer();
renderer.setSize( window.innerWidth, window.innerHeight );
document.body.appendChild( renderer.domElement );

var geometry = new THREE.BoxGeometry( 1, 1, 1 );
var material = new THREE.MeshLambertMaterial( { color: 0x00ff00 } );
var kv = 0.4;

//this line gets error: app.js:36 Uncaught TypeError: Cannot read property 'setRGB' of undefined
material.ambient.setRGB(kv * material.color.r, kv * material.color.g, kv * material.color.b);

var cube = new THREE.Mesh( geometry, material );
scene.add( cube );

camera.position.z = 5;

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

1 个答案:

答案 0 :(得分:3)

three.js材料不再具有ambient属性。

材料的环境反射率(材料如何响应间接光或环境光)现在假设与材料的漫反射光度相同 (材料如何响应直射光)。

材质的漫反射率也称为材质color

three.js r.80