コンテンツにスキップ

NatureUtil

自然表現用ユーティリティクラス

Constructors

new NatureUtil()

new NatureUtil(): NatureUtil

Returns

NatureUtil

Properties

DEG2RAD

static readonly DEG2RAD: number = 0.017453292519943


RAD2DEG

static readonly RAD2DEG: number = 57.29577951308232


epsilon

static readonly epsilon: number = 0.000001

Methods

calcTrianglesCenterBBoxArea()

static calcTrianglesCenterBBoxArea(vertices, indices, stride, offset, origin): number[]

三角板配列の中心、BBox、面積の計算 AbstractPolygonEntity.PrimitiveProducer.UpdatePrimitiveMesh(), AbstarctPolygonEntity.FlakePrimitiveProducer() の vertices, indices 三角板配列から計算

Parameters

Parameter Type Description
vertices Float32Array<ArrayBufferLike> 三角板頂点配列
indices Uint32Array<ArrayBufferLike> インデックス配列
stride number 三角板頂点配列の頂点ストライド
offset number 三角板頂点配列の頂点オフセット
origin Vector3 vertices の原点座標

Returns

number[]

[center_x, center_y, center_z, min_x, min_y, min_z, max_x, max_y, max_z, area_sum]


calcWaveVectorInMLOCS()

static calcWaveVectorInMLOCS(angle_degree, scale, dst): Vector3

MLOCS座標系での波の方向をx軸からの角度で生成する

Parameters

Parameter Type
angle_degree number
scale number
dst Vector3

Returns

Vector3


createAlignedNeighborGOCS()

static createAlignedNeighborGOCS(align_size, vec): Vector3

AlignSize単位の格子点集合の中で入力座標の近傍の座標(floorで得られる格子点)を返す

Parameters

Parameter Type
align_size number
vec Vector3

Returns

Vector3


createViewToAlignGOCS()

static createViewToAlignGOCS(align_size, view_to_gocs, model_to_gocs, dst): Matrix

view_to_gocs と obj_to_gocs から obj 用 viwe_to_aligned_gocs を作成

vx^g : GOCS成分で書かれたViewCSのx基底ベクトル vy^g : GOCS成分で書かれたViewCSのy基底ベクトル vz^g : GOCS成分で書かれたViewCSのz基底ベクトル vo^g : GOCS成分で書かれたViewCSの原点ベクトル

           (vx.x^g   vy.x^g   vz.x^g  vo.x^g)

view_to_gocs = (vx.y^g vy.y^g vz.y^g vo.y^g) (vx.z^g vy.z^g vz.z^g vo.z^g) ( 0 0 0 1)

gm^ag : モデル原点近傍のAlignGOCS格子点 = createAlignNeighborGOCS( A, mo^g );

(ret[0] ret[4] ret[ 8] ret[12]) = (vx.x^g vy.x^g vz.x^g vo.x^g - gm^ag) (ret[1] ret[5] ret[ 9] ret[13]) = (vx.y^g vy.y^g vz.y^g vo.y^g - gm^ag) (ret[2] ret[6] ret[10] ret[14]) = (vx.z^g vy.z^g vz.z^g vo.z^g - gm^ag) (ret[3] ret[7] ret[11] ret[15]) = ( 0 0 0 1)

Parameters

Parameter Type
align_size number
view_to_gocs Matrix
model_to_gocs Matrix
dst Matrix

Returns

Matrix


createVolumePlane()

static createVolumePlane(camera): Vector4[]

視錘台の VolumePlane を取得 ViewCS (XcWc) = ( ( 2n)/(r-l) 0 (r+l)/(r-l) 0 )(Xw) (YcWc) ( 0 ( 2n)/(t-b) (t+b)/(t-b) 0 )(Yw) (ZcWc) ( 0 0 -(f+n)/(f-n) -(2fn)/(f-n) )(Zw) ( Wc) ( 0 0 -1 0 )( 1)

(XcWc) = ( m[00] m[01] m[02] m[03] )(Xw) (YcWc) ( m[10] m[11] m[12] m[13] )(Yw) (ZcWc) ( m[20] m[21] m[22] m[23] )(Zw) ( Wc) ( m[30] m[31] m[32] m[33] )( 1)

(XcWc) = ( m[ 0] m[ 4] m[ 8] m[12] )(Xw) (YcWc) ( m[ 1] m[ 5] m[ 9] m[13] )(Yw) (ZcWc) ( m[ 2] m[ 6] m[10] m[14] )(Zw) ( Wc) ( m[ 3] m[ 7] m[11] m[15] )( 1)

near = (m[ 3] + m[ 2], m[ 7] + m[ 6], m[11] + m[10], m[15] + m[14]) = (0, 0, -1 + (-(f+n)/(f-n)), 0 + (-(2fn)/(f-n))) = (0, 0, -1 - (f+n)/(f-n)), -(2fn)/(f-n)) = (0, 0, -(f-n)/(f-n) - (f+n)/(f-n)), -(2fn)/(f-n)) = -(2f/(f-n))(0, 0, 1, n)

far = (m[ 3] - m[ 2], m[ 7] - m[ 6], m[11] - m[10], m[15] - m[14]) = (0, 0, -1 - (-(f+n)/(f-n)), -(-(2fn)/(f-n)) ) = (0, 0, -(f-n)/(f-n) + (f+n)/(f-n)), (2fn)/(f-n) ) = (0, 0, (2n)/(f-n)), (2fn)/(f-n) ) = (2n/(f-n))(0, 0, 1, f)

left = (m[ 3] + m[ 0], m[ 7] + m[ 4], m[11] + m[ 8], m[15] + m[12]) = (0 + ( 2n)/(r-l), 0 + 0, -1 + (r+l)/(r-l), 0 + 0) = ((2n)/(r-l), 0, -(r-l)/(r-l) + (r+l)/(r-l), 0) = ((2n)/(r-l), 0, (2l)/(r-l), 0) = (2/(r-l))(n, 0, l, 0)

right= (m[ 3] - m[ 1], m[ 7] - m[ 5], m[11] - m[ 9], m[15] - m[13]) = (0 - 0, 0 - 0, -1 - (r+l)/(r-l), 0 - 0) = (-(2n)/(r-l), 0, -(r-l)/(r-l) - (r+l)/(r-l), 0) = (-(2n)/(r-l), 0, -(2r)/(r-l), 0) = -(2/(r-l))(n, 0, r, 0)

bottom= (m[ 3] + m[ 0], m[ 7] + m[ 4], m[11] + m[ 8], m[15] + m[12]) = (0 + 0, 0 + ( 2n)/(t-b), -1 + (t+b)/(t-b), 0 + 0) = (0, (2n)/(t-b), -(t-b)/(t-b) + (t+b)/(t-b), 0) = (0, (2n)/(t-b), (2b)/(t-b), 0) = (2/(t-b))(0, n, b, 0)

top = (m[ 3] - m[ 0], m[ 7] - m[ 4], m[11] - m[ 8], m[15] - m[12]) = (0 - 0, 0 - ( 2n)/(t-b), -1 - (t+b)/(t-b), 0 - 0) = (0, -(2n)/(t-b), -(t-b)/(t-b) - (t+b)/(t-b), 0) = (0, -(2n)/(t-b), -(2t)/(t-b), 0) = -(2/(t-b))(0, n, t, 0)

Parameters

Parameter Type
camera Camera

Returns

Vector4[]


getMoveFromMatrix()

static getMoveFromMatrix(m): Vector3

Matrix 第 4 列から移動ベクトルを取得

(m00 m01 m02 m03) (m[ 0] m[ 4] m[ 8] m[12]) (m10 m11 m12 m13) = (m[ 1] m[ 5] m[ 9] m[13]) (m20 m21 m22 m32) (m[ 2] m[ 6] m[10] m[14]) (m30 m31 m32 m33) ( 0 0 0 1)

Parameters

Parameter Type
m Matrix

Returns

Vector3


getWaveVectorInModelCS()

static getWaveVectorInModelCS(pos_model, model_to_gocs, wave_mlocs, dst): Vector3

MLOCS座標系での波の方向からモデル座標系での波の方向を計算する

Parameters

Parameter Type
pos_model Vector3
model_to_gocs Matrix
wave_mlocs Vector3
dst Vector3

Returns

Vector3


isMatrixSame()

static isMatrixSame(m0, m1): boolean

Matrix 第 4 列に移動ベクトルをセット

(m00 m01 m02 m03) (m[ 0] m[ 4] m[ 8] m[12]) (m10 m11 m12 m13) = (m[ 1] m[ 5] m[ 9] m[13]) (m20 m21 m22 m32) (m[ 2] m[ 6] m[10] m[14]) (m30 m31 m32 m33) ( 0 0 0 1)

Parameters

Parameter Type
m0 Matrix
m1 Matrix

Returns

boolean


isZero()

static isZero(x): boolean

epsilonを考慮したゼロ判定

Parameters

Parameter Type
x number

Returns

boolean


setMoveToMatrix()

static setMoveToMatrix(m, mov): Matrix

Matrix 第 4 列に移動ベクトルをセット

(m00 m01 m02 m03) (m[ 0] m[ 4] m[ 8] m[12]) (m10 m11 m12 m13) = (m[ 1] m[ 5] m[ 9] m[13]) (m20 m21 m22 m32) (m[ 2] m[ 6] m[10] m[14]) (m30 m31 m32 m33) ( 0 0 0 1)

Parameters

Parameter Type
m Matrix
mov Vector3

Returns

Matrix