10

我在 Three.js 中创建了一个自定义几何图形。现在,我想创建一个使用平滑着色 Lambert 材质的网格。使用循环,我创建了顶点数组,然后是面,然后我调用了

geometry.computeCentroids();
geometry.computeFaceNormals();
geometry.computeVertexNormals();

var colorMaterial =  new THREE.MeshLambertMaterial( {color: 0x0000ff, side: THREE.DoubleSide} );
var mesh = new THREE.Mesh( geometry, colorMaterial );
scene.add(mesh);

结果几乎是完美的,除了它看起来好像正在使用材料shading: THREE.FlatShading,如下所示:

在此处输入图像描述

虽然我期待一个通常期望的默认外观shading: THREE.SmoothShading. 我需要添加/更改什么以获得平滑的兰伯特阴影?

(如果有帮助,完整的实时示例位于http://stemkoski.github.io/Three.js/Marching-Cubes.html,几何和网格围绕第 250-280 行创建。)

4

1 回答 1

25

这是因为相邻面不共享模型中的顶点。

如果您geometry.mergeVertices()在完成几何体创建之后立即调用,并且在调用之前调用geometry.computeVertexNormals(),那么您的阴影看起来会更平滑。

三.js r.58

于 2013-06-15T01:26:43.633 回答