LOD

—> Object3D

Level of Detail —— 根据与计算机的距离显示多少个网格. 当你要创建多个网格 Mesh, 并把它们都放在同一个位置, 自己写if判断来设定距离范围来显示哪个指定的网格, 会比较麻烦. 而采用 LOD 就方便多了, 它已经帮你计算好, 使用方法 addLevel( object, distance ) 在指定的距离处切换渲染. 通常在离计算机距离较小的时候显示更高的几何体细节. 如下演示, 二十面体 IcosahedronGeometry 在不同的距离间进行切换. 把camera的z坐标设为25, 当distance小于25时, 显示的几何体是 IcosahedronGeometry( 8, 1 ), 而一旦过了25, 就变成 IcosahedronGeometry( 8, 0 ) 了.

function LOD( ) { } camera.position.z = 25; var lod = new THREE.LOD(), lod2 = new THREE.LOD(); for( var i = 0; i < 2; i++ ) { var geometry = new THREE.IcosahedronGeometry( 8, 1 - i ); var material = new THREE.MeshBasicMaterial({ color: 0xffffff * (i+1)/2, wireframe: true }); var mesh = new THREE.Mesh( geometry, material ), mesh2 = new THREE.Mesh( geometry, material ); lod.addLevel( mesh, i * 25 ); lod2.addLevel( mesh2, i * 25 ); lod.position.x = -12; lod2.position.x = 12; } var group = new THREE.Group(); group.add(lod); group.add(lod2); scene.add(group); function animate(){ lod.update( camera ); lod2.update( camera ); requestAnimationFrame(animate); }

Attributes

type : String

Default value : 'LOD'
Description : 类型

levels : Object

Default value :
Description : 细节的级别, 包含 distance 和 object 的属性.

Methods

  addLevel( object, distance ) : null
object Object3D 在 distance 处展示的物体
distance Number 显示此级别level的距离

添加一个物体, 在大于或等于该特定距离时显示它. 通常在离计算机距离较小的时候显示更高的几何体细节.

getObjectForDistance( distance ) : Object3D
distance Number 显示此级别level的距离

获取第一个大于该距离的物体.

raycast( raycaster, intersects ) : Array
raycaster Raycaster 射线检测器
intersects Array 相交物体的数组

返回跟光线相交的物体的数组.

update( camera ) : null

根据与摄像机的距离, 设置每个级别对象的可见性. 这需要在渲染循环中调用, 以便动态更新细节级别.