three.js LOD

2023-02-16 17:47 更新

多細(xì)節(jié)層次 —— 在顯示網(wǎng)格時(shí),根據(jù)攝像機(jī)距離物體的距離,來(lái)使用更多或者更少的幾何體來(lái)對(duì)其進(jìn)行顯示。

每一個(gè)級(jí)別都和一個(gè)幾何體相關(guān)聯(lián),且在渲染時(shí),可以根據(jù)給定的距離,來(lái)在這些級(jí)別對(duì)應(yīng)的幾何體之間進(jìn)行切換。 通常情況下,你會(huì)創(chuàng)建多個(gè)幾何體,比如說(shuō)三個(gè),一個(gè)距離很遠(yuǎn)(低細(xì)節(jié)),一個(gè)距離適中(中等細(xì)節(jié)),還有一個(gè)距離非常近(高質(zhì)量)。

代碼示例

const lod = new THREE.LOD();

//Create spheres with 3 levels of detail and create new LOD levels for them
for( let i = 0; i < 3; i++ ) {

	const geometry = new THREE.IcosahedronGeometry( 10, 3 - i )

	const mesh = new THREE.Mesh( geometry, material );

	lod.addLevel( mesh, i * 75 );

}

scene.add( lod );

例子

webgl / lod

構(gòu)造函數(shù)

LOD( )

創(chuàng)建一個(gè)新的 LOD.

屬性

共有屬性請(qǐng)參見(jiàn)其基類(lèi)Object3D。

.autoUpdate : Boolean

LOD 對(duì)象是否由渲染器每幀自動(dòng)更新。如果設(shè)置為 false,您必須自己在渲染循環(huán)中調(diào)用 LOD.update()。默認(rèn)為真。

.isLOD : Boolean

用于檢查給定對(duì)象是否為 LOD 類(lèi)型的只讀標(biāo)志。

.levels : Array

一個(gè)包含有l(wèi)evel objects(各層次物體)的數(shù)組。

每一個(gè)層級(jí)都是一個(gè)對(duì)象,具有以下兩個(gè)屬性: object —— 在這個(gè)層次中將要顯示的Object3D。

distance —— 將顯示這一細(xì)節(jié)層次的距離。
hysteresis —— Threshold used to avoid flickering at LOD boundaries, as a fraction of distance.

方法

共有方法請(qǐng)參見(jiàn)其基類(lèi)Object3D。

.addLevel ( object : Object3D, distance : Float, hysteresis : Float ) : this

object —— 在這個(gè)層次中將要顯示的Object3D。
distance —— 將顯示這一細(xì)節(jié)層次的距離。
hysteresis —— Threshold used to avoid flickering at LOD boundaries, as a fraction of distance. Default 0.0.

添加在一定距離和更大范圍內(nèi)顯示的網(wǎng)格。通常來(lái)說(shuō),距離越遠(yuǎn),網(wǎng)格中的細(xì)節(jié)就越少。

.clone () : LOD

返回一個(gè)LOD對(duì)象及其所關(guān)聯(lián)的在特定距離中的物體。

.getCurrentLevel () : Integer

Get the currently active LOD level. As index of the levels array.

.getObjectForDistance ( distance : Float ) : Object3D

獲得第一個(gè)比distance大的Object3D(網(wǎng)格)的引用。

.raycast ( raycaster : Raycaster, intersects : Array ) : undefined

在一條投射出去的Ray(射線)和這個(gè)LOD之間獲得交互。 Raycaster.intersectObject將會(huì)調(diào)用這個(gè)方法。

.toJSON ( meta ) : Object

使用這個(gè)方法,為L(zhǎng)OD對(duì)象中的每個(gè)細(xì)節(jié)層次創(chuàng)建一個(gè)JSON結(jié)構(gòu)。

.update ( camera : Camera ) : undefined

基于每個(gè)level中的object和camera(攝像機(jī))之間的距離,來(lái)設(shè)置其可見(jiàn)性。

源代碼

src/objects/LOD.js


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)