three.js MeshSurfaceSampler

2023-02-16 17:51 更新

用于對網(wǎng)格表面上的加權(quán)隨機(jī)點(diǎn)進(jìn)行采樣的實(shí)用程序類。

加權(quán)采樣對于某些地形區(qū)域中較重的樹葉生長或網(wǎng)格特定部分的集中粒子發(fā)射等效果很有用。頂點(diǎn)權(quán)重可以編程方式編寫,也可以在 Blender 等 3D 工具中手工繪制為頂點(diǎn)顏色。

代碼示例

// Create a sampler for a Mesh surface.
const sampler = new MeshSurfaceSampler( surfaceMesh )
	.setWeightAttribute( 'color' )
	.build();

const sampleMesh = new THREE.InstancedMesh( sampleGeometry, sampleMaterial, 100 );

const _position = new THREE.Vector3();
const _matrix = new THREE.Matrix4();

// Sample randomly from the surface, creating an instance of the sample
// geometry at each sample point.
for ( let i = 0; i < 100; i ++ ) {

	sampler.sample( _position );

	_matrix.makeTranslation( _position.x, _position.y, _position.z );

	mesh.setMatrixAt( i, _matrix );

}

mesh.instanceMatrix.needsUpdate = true;

scene.add( mesh );

例子

webgl_instancing_scatter

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

MeshSurfaceSampler( mesh : Mesh )

mesh — 從中采樣的表面網(wǎng)格。

創(chuàng)建一個(gè)新的 MeshSurfaceSampler。如果輸入幾何體被索引,則創(chuàng)建一個(gè)非索引副本。構(gòu)建之后,采樣器無法返回樣本,直到調(diào)用構(gòu)建。

方法

.setWeightAttribute ( name : String ) : this

指定從表面采樣時(shí)用作權(quán)重的頂點(diǎn)屬性。權(quán)重較高的人臉更有可能被采樣,而權(quán)重為零的人臉則根本不會(huì)被采樣。對于矢量屬性,僅 .x 用于采樣。

如果未選擇權(quán)重屬性,則采樣按區(qū)域隨機(jī)分布。

.build () : this

處理輸入幾何并準(zhǔn)備返回樣本。幾何或采樣器的任何配置都必須在調(diào)用此方法之前進(jìn)行。對于具有 n 個(gè)面的表面,時(shí)間復(fù)雜度為 O(n)。

.sample ( targetPosition : Vector3, targetNormal : Vector3, targetColor : Color ) : this

在輸入幾何體的表面上選擇一個(gè)隨機(jī)點(diǎn),返回該點(diǎn)的位置以及可選的法向量和顏色。對于具有 n 個(gè)面的表面,時(shí)間復(fù)雜度為 O(log n)。

源碼

examples/jsm/math/MeshSurfaceSampler.js


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

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號