三个方向灯随着距离而下降

时间:2017-08-25 17:00:12

标签: three.js

根据THREE.DirectionalLight的文档:

  

这种光的行为就好像它是无限远的,而且它产生的光线都是平行的。

但是,我发现作为一个移动的物体是THREE.MeshStandardMaterial远离光线(但保持相同的相对角度),光线的强度会降低。这对我来说似乎不对。



var canvas = document.createElement("canvas");
document.body.appendChild(canvas);

var dpr = window.devicePixelRatio;
var renderer = new THREE.WebGLRenderer({canvas: canvas, antialias: true});
renderer.setPixelRatio(dpr);
renderer.setSize(window.innerWidth, window.innerHeight);
renderer.setClearColor(0);

var scene = new THREE.Scene();

var camera = new THREE.PerspectiveCamera(45, window.innerWidth/window.innerHeight, 0.1, 1000);
camera.position.z = 700;

var planeGeom = new THREE.PlaneGeometry(200, 200);
var plane = new THREE.Mesh(planeGeom, new THREE.MeshStandardMaterial({color: 0xff00ff, metalness: 1}));
plane.position.z = -10;
scene.add(plane);

var light = new THREE.DirectionalLight(0xffffff, 1);
light.position.set(-50, 50, 100);
scene.add(light);

var helper = new THREE.DirectionalLightHelper(light, 10);
scene.add(helper);

function update(time) {
  plane.position.x = 200 * Math.sin(time);
  plane.position.y = 200 * Math.cos(time/2);
}

function render() {
  requestAnimationFrame(render);
  update(performance.now() / 1000);
  renderer.render(scene, camera);
}
render();

body {
  margin: 0;
  padding: 0;
}

<script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/86/three.min.js"></script>
&#13;
&#13;
&#13;

我希望无论飞机在什么位置都能点亮飞机。我做错了什么?

1 个答案:

答案 0 :(得分:3)

您正在使用MeshStandardMaterial并将metalness设置为1。

金属主要反映出来;反射的漫反射成分很小。

所以你所看到的是#34;热点&#34;反思。例如,将metalness设置为零,您将主要看到漫反射。

此外,使用MeshStandardMaterial时,您应该包含一个环境贴图(material.envMap),以便有所反映。材料 - 特别是金属 - 看起来会好得多。

three.js r.87