PlaneGeometry和Directional Light

时间:2013-07-03 19:05:21

标签: three.js

我遇到闪电和平面几何问题。 在创建具有特定高度数据的平面几何体时, 在我看来,定向光影响了 啮合。整体上还有相同的颜色:(

var geometry: THREE.PlaneGeometry
   = new THREE.PlaneGeometry(1000, 1000, 199, 199);

for (var i = 0, l = geometry.vertices.length; i < l; i++)
    geometry.vertices[i].z = this._heightmap.data[i];

var mesh = new THREE.Mesh(geometry, 
    new THREE.MeshLambertMaterial({ color: 0x1AAD2B }));

mesh.applyMatrix(new THREE.Matrix4().makeRotationX(- Math.PI / 2));

this.screen.get("Scene").add(mesh);

var light = new THREE.DirectionalLight(0xffffff, 1);

light.position.set(0.8, 0.5, 1);
light.position.normalize();
this.screen.get("Scene").add(light);

http://s14.directupload.net/images/130703/jsfx9tr3.png

我必须创建自己的着色器,还是需要执行的选项?

亲切的问候 基督教

1 个答案:

答案 0 :(得分:1)

你没有改变顶点法线;它们都是(0,1,0)。

此外,修改四边形的顶点时,四个顶点很可能不再是平面。这会给你带来各种各样的问题。 (谷歌非平面四边形。)

您可以通过先对PlaneGeometry进行三角测量来避免这些问题:

THREE.GeometryUtils.triangulateQuads( geometry );

请注意,此函数会重新计算顶点法线。查看源代码,以便了解它的作用。

编辑:three.js不再支持四边形; PlaneGeometry现已进行三角测量。

three.js r.66