BufferGeometry
Object3D
Raycaster
Camera
CubeCamera
PerspectiveCamera
OrthographicCamera
StereoCamera
Clock
Curve
CurvePath
Path
Shape
ShapePath
ArrowHelper
AxesHelper
BoxHelper
Box3Helper
CameraHelper
DirectionalLightHelper
GridHelper
PolarGridHelper
HemisphereLightHelper
PlaneHelper
PointLightHelper
SkeletonHelper
SpotLightHelper
Light
PointLight
RectAreaLight
SpotLight
DirectionalLight
HemisphereLight
LightShadow
PointLightShadow
AnimationLoader
AudioLoader
BufferGeometryLoader
CompressedTextureLoader
CubeTextureLoader
DataTextureLoader
FileLoader
ImageBitmapLoader
ImageLoader
Loader
LoaderUtils
MaterialLoader
ObjectLoader
TextureLoader
LoadingManager
Material
Box2
Box3
Color
Cylindrical
Euler
Frustum
Interpolant
Line3
MathUtils
Matrix3
Matrix4
Plane
Quaternion
AnimationAction
AnimationClip
AnimationMixer
AnimationObjectGroup
AnimationUtils
keyframeTrack
PropertyBinding
PropertyMixer
BooleanKeyframeTrack
QuaternionKeyframeTrack
StringKeyframeTrack
Audio
AudioAnalyser
AudioContext
AudioListener
PositionalAudio

BufferGeometry.computeVertexNormals()

computeVertexNormals()是three.js中bufferGeometry的一个方法,可以根据模型的顶点信息计算法向量,以使模型具有更好的渲染效果和光影效果。

语法

bufferGeometry.computeVertexNormals();

参数

无参数。

描述

computeVertexNormals() 方法可以计算三维模型各个顶点的法向量,在渲染过程中用于计算光照效果(如环境光、漫反射等)。这个方法会通过解析geometry中的facet信息,计算每个顶点法向量的平均值(根据facet的法向量)。

当你将一个未经过计算法向量的三维模型进行渲染时,模型将变得毫无质感,没有光影效果,使其显得非常平凡。因此,在进行三维模型渲染之前,必须计算模型的法向量。在使用computeVertexNormals()方法之前,需要先确认geometry已经有顶点和面信息。

计算顶点法向量的过程会建立一个法线向量,并用这个向量公式平均各面的法向量。结果是,每个顶点获得了一个法向量,从而可以更准确的渲染。

示例

var geometry = new THREE.BoxGeometry( 1, 1, 1 );
geometry.computeVertexNormals();
var material = new THREE.MeshPhongMaterial( { color: 0x00ff00 } );
var mesh = new THREE.Mesh( geometry, material );
scene.add( mesh );

在上面的示例中,我们创建了一个立方体的geometry,然后使用computeVertexNormals()方法计算每个顶点的法向量,并使用这个模型渲染场景。

注意事项

  • 当你导入自定义模型时,有些模型没有顶点法向量信息。因此,在导入模型之前,需要先确认是否有顶点信息并进行必要的计算。
  • 只有在计算三维模型渲染时,才需要对模型进行法向量计算。如果你只是需要显示一些简单的模型,可以不考虑这个问题。
  • computeVertexNormals()会修改你的geometry,所以在计算之前最好先进行备份。
  • 当你调用了这个方法,可能会重新计算法线向量(计算量较大),所以在renderloop更新时要注意性能问题。

维护者

@navy-xue

参考文献