three.js Box3

2023-02-16 17:46 更新

表示三維空間中的一個(gè)軸對(duì)齊包圍盒(axis-aligned bounding box,AABB)。

代碼示例

const box = new THREE.Box3();

const mesh = new THREE.Mesh(
	new THREE.SphereGeometry(),
	new THREE.MeshBasicMaterial()
);

// ensure the bounding box is computed for its geometry
// this should be done only once (assuming static geometries)
mesh.geometry.computeBoundingBox();

// ...

// in the animation loop, compute the current bounding box with the world matrix
box.copy( mesh.geometry.boundingBox ).applyMatrix4( mesh.matrixWorld );

構(gòu)造器(Constructor)

Box3( min : Vector3, max : Vector3 )

min - (參數(shù)可選) Vector3 表示包圍盒的下邊界。 默認(rèn)值是( + Infinity, + Infinity, + Infinity )。
max - (參數(shù)可選) Vector3 表示包圍盒的上邊界。 默認(rèn)值是( - Infinity, - Infinity, - Infinity )。

創(chuàng)建一個(gè)以max和min為邊界的包圍盒。

屬性(Properties)

.isBox3 : Boolean

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

.min : Vector3

Vector3 表示包圍盒的下邊界。默認(rèn)值是( + Infinity, + Infinity, + Infinity )。

.max : Vector3

Vector3 包圍盒的(x, y, z)上邊界。默認(rèn)值是 ( - Infinity, - Infinity, - Infinity ).

方法(Methods)

.applyMatrix4 ( matrix : Matrix4 ) : this

matrix - 要應(yīng)用的 Matrix4

使用傳入的矩陣變換Box3(包圍盒8個(gè)頂點(diǎn)都會(huì)乘以這個(gè)變換矩陣)。

.clampPoint ( point : Vector3, target : Vector3 ) : Vector3

point - 需要做clamp 的坐標(biāo) Vector3。
target — 結(jié)果將會(huì)被拷貝到這個(gè)對(duì)象中

使這個(gè)點(diǎn)point Clamps(處于范圍內(nèi)) 處于包圍盒邊界范圍內(nèi)。

.clone () : Box3

返回一個(gè)與該包圍盒子有相同下邊界min 和上邊界 max的新包圍盒。

.containsBox ( box : Box3 ) : Boolean

box - 需要檢測(cè)是否在當(dāng)前包圍盒內(nèi)的 Box3。

傳入的 box 整體都被包含在該對(duì)象中則返回true。如果他們兩個(gè)包圍盒是一樣的也返回true。

.containsPoint ( point : Vector3 ) : Boolean

point - 需要檢測(cè)是否在當(dāng)前包圍盒內(nèi)的 Vector3。

當(dāng)傳入的值 point 在包圍盒內(nèi)部或者邊界都會(huì)返回true。

.copy ( box : Box3 ) : this

box - 需要復(fù)制的包圍盒 Box3 。

將傳入的值 box 中的 min 和 max 拷貝到當(dāng)前對(duì)象。

.distanceToPoint ( point : Vector3 ) : Float

point - 用來(lái)測(cè)試距離的點(diǎn) Vector3。

返回這個(gè)box的任何邊緣到指定點(diǎn)的距離。如果這個(gè)點(diǎn)位于這個(gè)盒子里,距離將是0。

.equals ( box : Box3 ) : Boolean

box - 將box與當(dāng)前對(duì)象做比較。

返回true如果傳入的值與當(dāng)前的對(duì)象 box 有相同的上下邊界。

.expandByObject ( object : Object3D ) : this

object - 包裹在包圍盒中的3d對(duì)象 Object3D。

擴(kuò)展此包圍盒的邊界,使得對(duì)象及其子對(duì)象在包圍盒內(nèi),包括對(duì)象和子對(duì)象的世界坐標(biāo)的變換。 該方法可能會(huì)導(dǎo)致一個(gè)比嚴(yán)格需要的更大的框。

.expandByPoint ( point : Vector3 ) : this

point - 需要在包圍盒中的點(diǎn) Vector3。

擴(kuò)展這個(gè)包圍盒的邊界使得該點(diǎn)(point)在包圍盒內(nèi)。

.expandByScalar ( scalar : Float ) : this

scalar - 擴(kuò)展包圍盒的比例。

按 scalar 的值展開盒子的每個(gè)維度。如果是負(fù)數(shù),盒子的尺寸會(huì)縮小。

.expandByVector ( vector : Vector3 ) : this

vector - 擴(kuò)展包圍盒的數(shù)值 Vector3 。

按 vector 每個(gè)緯度的值展開這個(gè)箱子。 這個(gè)盒子的寬度將由 vector 的x分量在兩個(gè)方向上展開。 這個(gè)盒子的高度將由 vector 兩個(gè)方向上的y分量展開。 這個(gè)盒子的深度將由 vector z分量在兩個(gè)方向上展開。

.getBoundingSphere ( target : Sphere ) : Sphere

target — 如果指定了target ,結(jié)果將會(huì)被拷貝到target。

獲取一個(gè)包圍球 Sphere。

.getCenter ( target : Vector3 ) : Vector3

target — 如果指定了target ,結(jié)果將會(huì)被拷貝到target。

返回包圍盒的中心點(diǎn) Vector3。

.getParameter ( point : Vector3, target : Vector3 ) : Vector3

point - Vector3.
target — 如果指定了target ,結(jié)果將會(huì)被拷貝到target。

返回一個(gè)點(diǎn)為這個(gè)盒子的寬度、高度和深度的比例。

.getSize ( target : Vector3 ) : Vector3

target — 如果指定了target ,結(jié)果將會(huì)被拷貝到target。

返回包圍盒的寬度,高度,和深度。

.intersect ( box : Box3 ) : this

box - 與包圍盒的交集

計(jì)算此包圍盒和 box 的交集,將此框的上界設(shè)置為兩個(gè)框的max的較小部分, 將此包圍盒的下界設(shè)置為兩個(gè)包圍盒的min的較大部分。如果兩個(gè)包圍盒不相交,則清空此包圍盒。

.intersectsBox ( box : Box3 ) : Boolean

box - 用來(lái)檢測(cè)是否相交的包圍盒

確定當(dāng)前包圍盒是否與傳入包圍盒box 相交。

.intersectsPlane ( plane : Plane ) : Boolean

plane - 用來(lái)檢測(cè)是否相交的 Plane。

確定當(dāng)前包圍盒是否與平面 plane 相交。

.intersectsSphere ( sphere : Sphere ) : Boolean

sphere - 用來(lái)檢測(cè)是否相交的球體 Sphere。

確定當(dāng)前包圍盒是否與球體 sphere 相交。

.intersectsTriangle ( triangle : Triangle ) : Boolean

triangle - 用來(lái)檢測(cè)是否相交的三角形 Triangle。

確定當(dāng)前包圍盒是否與三角形 triangle 相交。

.isEmpty () : Boolean

如果這個(gè)盒子包含0個(gè)頂點(diǎn),則返回true。

注意,下界和上界相等的方框仍然包含一個(gè)點(diǎn),即兩個(gè)邊界共享的那個(gè)點(diǎn)。

.makeEmpty () : this

清空包圍盒。

.set ( min : Vector3, max : Vector3 ) : this

min - Vector3 表示下邊界每個(gè)緯度(x,y,z)的值。
max - Vector3 表示上邊界每個(gè)緯度(x,y,z)的值。

設(shè)置包圍盒上下邊界每個(gè)緯度(x,y,z)的值。
請(qǐng)注意,此方法僅復(fù)制給定對(duì)象的值。

.setFromArray ( array : Array ) : this

array - 數(shù)組當(dāng)中的所有的點(diǎn)都將被包圍盒包裹。

設(shè)置包圍盒的上下邊界使得數(shù)組 array 中的所有點(diǎn)的點(diǎn)都被包含在內(nèi)。

.setFromBufferAttribute ( attribute : BufferAttribute ) : this

attribute - 位置的緩沖數(shù)據(jù),包含在返回的包圍盒內(nèi)。

設(shè)置此包圍盒的上邊界和下邊界,以包含 attribute 中的所有位置數(shù)據(jù)。

.setFromCenterAndSize ( center : Vector3, size : Vector3 ) : this

center, - 包圍盒所要設(shè)置的中心位置。
size - 包圍盒所要設(shè)置的x、y和z尺寸(寬/高/長(zhǎng))。

將當(dāng)前包圍盒的中心點(diǎn)設(shè)置為 center ,并將此包圍盒的寬度,高度和深度設(shè)置為大小指定 size 的值。

.setFromObject ( object : Object3D ) : this

object - 用來(lái)計(jì)算包圍盒的3D對(duì)象 Object3D。

計(jì)算和世界軸對(duì)齊的一個(gè)對(duì)象 Object3D (含其子對(duì)象)的包圍盒,計(jì)算對(duì)象和子對(duì)象的世界坐標(biāo)變換。 該方法可能會(huì)導(dǎo)致一個(gè)比嚴(yán)格需要的更大的框。

.setFromPoints ( points : Array ) : this

points - 計(jì)算出的包圍盒將包含數(shù)組中所有的點(diǎn) Vector3s

設(shè)置此包圍盒的上邊界和下邊界,以包含數(shù)組 points 中的所有點(diǎn)。

.translate ( offset : Vector3 ) : this

offset - 偏移方向和距離。

給包圍盒的上下邊界添加偏移量 offset,這樣可以有效的在3D空間中移動(dòng)包圍盒。 偏移量為 offset 大小。

.union ( box : Box3 ) : this

box - 將被用于與該盒子計(jì)算并集的盒子。

在 box 參數(shù)的上邊界和已有box對(duì)象的上邊界之間取較大者,而對(duì)兩者的下邊界取較小者,這樣獲得一個(gè)新的較大的聯(lián)合盒子。

源碼(Source)

src/math/Box3.js


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

掃描二維碼

下載編程獅App

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

編程獅公眾號(hào)