Skip to content

Matrix4x4 (JavaScript)

Matrix4x4

Scripting Name:Insight.Matrix4x4

4x4 矩阵。

constructor();

Matrix4x4 的构造方法无参数,其值为单位矩阵的值(1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,1)。

Properties


determinant

type :number

(只读)行列式的值。

inverse

type :Insight.Matrix4

(只读)逆矩阵。

isIdentity

type :boolean

(只读)是否为单位矩阵。

lossyScale

type :Insight.Vector3

(只读)缩放。

rotation

type :Insight.Quaternion

(只读)旋转。

transpose

type :Insight.Matrix4

(只读)转置矩阵。

Static Properties


identity

type :Insight.Matrix4

(只读)单位矩阵。

zero

type :Insight.Matrix4

(只读)零矩阵。

Methods


set

javascript
set(n11: number, n12: number, n13: number, n14: number, n21: number, n22: number, n23: number, n23: number, n23: number, n24: number, n31: number, n32: number, n33: number, n34: number, n41: number, n42: number, n43: number, n44: number): this;

设置向量各个分量的值,返回值为本身。

Parameters

  • n11 : number 矩阵的第一行第一个值
  • n12 : number 矩阵的第一行第二个值
  • n13 : number 矩阵的第一行第三个值
  • ……

identity

javascript
identity(): this;

将本矩阵重置为单位矩阵,因此本矩阵的原值可能会被改变。

clone

javascript
clone(): Matrix4;

克隆一个新矩阵等于本矩阵。

copy

javascript
copy(m: Matrix4): this;

将另一个矩阵的值拷贝到本矩阵中。

Parameters

  • m : Insight.Matrix4 另一个矩阵

copyPosition

javascript
copyPosition(m: Matrix4): this;

将另一个矩阵的平移向量部分的值拷贝到本矩阵中,因此本矩阵的原值可能会被改变。

Parameters

  • m : Insight.Matrix4 另一个矩阵

extractBasis

javascript
extractBasis(xAxis: Vector3, yAxis: Vector3, zAxis: Vector3): this;

将本向量的正交基放到 xAxis,yAxis,zAxis 中。如果矩阵为:

(a, b, c, d,

e, f, g, h,

i, j, k, l,

m, n, o, p)

则 xAxis,yAxis,zAxis 为:

xAxis = (a, e, i)

yAxis = (b, f, j)

zAxis = (c, g, k)

Parameters

  • xAxis : Insight.Vector3 正交基的 x 轴
  • yAxis : Insight.Vector3 正交基的 y 轴
  • zAxis : Insight.Vector3 正交基的 z 轴

makeBasis

javascript
makeBasis(xAxis: Vector3, yAxis: Vector3, zAxis: Vector3): this;

将 xAxis,yAxis,zAxis 表示的正交基组成矩阵,并将值放入本矩阵中,因此本矩阵的原值可能会被丢弃。

矩阵可以表示为:

(xAxis.x, yAxis.x, zAxis.x, 0,

xAxis.y, yAxis.y, zAxis.y, 0,

xAxis.z, yAxis.z, zAxis.z, 0,

0, 0, 0, 1)

Parameters

  • xAxis : Insight.Vector3 正交基的 x 轴
  • yAxis : Insight.Vector3 正交基的 y 轴
  • zAxis : Insight.Vector3 正交基的 z 轴

extractRotation

javascript
extractRotation(m: Matrix4): this;

将矩阵 m 的旋转向量部分提取成新矩阵,并将新矩阵的值放入本矩阵中,因此本矩阵的原值可能会被丢弃。

Parameters

  • m : Insight.Matrix4 另一个矩阵

makeRotationFromQuaternion

javascript
makeRotationFromQuaternion(q: Quaternion): Matrix4;

将该矩阵的值设置为由 q 定义的旋转矩阵,因此本矩阵的原值可能会被丢弃。

若 q = w + xi + yj + zk,则旋转矩阵表示为:

矩阵可以表示为:

(1-2y²-2z² 2xy-2zw 2xz+2yw 0,

2xy+2zw 1-2x²-2z² 2yz-2xw 0,

2xz-2yw 2yz+2xw 1-2x²-2y² 0,

0 0 0 1)

Parameters

  • q : Insight.Quaternion 待计算的四元数

lookAt

javascript
lookAt(eye: Vector3, target: Vector3, up: Vector3): this;

构造一个新矩阵,从 eye 方向看向 target,并以 up 为上方向,并放入本矩阵中,因此本矩阵的原值可能会被丢弃。

Parameters

  • eye : Insight.Vector3 eye 方向
  • target : Insight.Vector3 target 方向
  • up : Insight.Vector3 up 方向

multiply

javascript
multiply(m: Matrix4): this;

计算本矩阵与矩阵 m 的乘积,并将新矩阵的值放入本矩阵中,相当于 this = this * m。

Parameters

  • m : Insight.Matrix4 另一个矩阵

multiplyMatrices

javascript
multiplyMatrices(a: Matrix4, b: Matrix4): this;

计算矩阵 a 与矩阵 b 的乘积,并将新矩阵的值放入本矩阵中,相当于 this = a * b。

Parameters

  • a: Insight.Matrix4 矩阵 a
  • a: Insight.Matrix4 矩阵 b

multiplyScalar

javascript
multiplyScalar(s: number): this;

计算本矩阵与标量 s 的乘积,并将新矩阵的值放入本矩阵中,相当于 this = this * s。

Parameters

  • s: number 标量 s

premultiply

javascript
premultiply(m: Matrix4): this;

计算矩阵 m 与本矩阵的乘积,并将新矩阵的值放入本矩阵中,相当于 this = m * this。

Parameters

  • m : Insight.Matrix4 另一个矩阵

determinant

javascript
determinant(): number;

计算本矩阵的行列式。

transpose

javascript
transpose(): this;

计算本矩阵的转置矩阵,并将值放入本矩阵中,因此本矩阵的原值可能会被丢弃。

setPosition

javascript
setPosition(v: Vector3 | number, y?: number, z?: number): this;

将 v 或 vyz 组成的向量作为平移向量部分放入本矩阵中,因此本矩阵的平移向量部分的值可能会被改变,但本矩阵其余的值不会改变。

Parameters

  • v: Insight.Vector3 或 number 向量 v 或浮点数 v
  • y: number 浮点数 y
  • z: number 浮点数 z

getInverse

javascript
getInverse(m: Matrix4): this;

将矩阵 m 的逆矩阵放入本矩阵中,因此本矩阵的原值可能会被丢弃。

Parameters

  • m : Insight.Matrix4 矩阵 m

scale

javascript
scale(v: Vector3): this;

计算本矩阵与向量 v 的乘积,并将新矩阵的值放入本矩阵中,相当于 this = m * this。

Parameters

  • v : Insight.Vector3 向量 v

getMaxScaleOnAxis

javascript
getMaxScaleOnAxis(): number;

计算用本矩阵表示的三维空间的三个相互垂直的坐标轴的最大长度。

makeTranslation

javascript
makeTranslation(x: number, y: number, z: number): this;

将本矩阵设置为由 xyz 表示的平移矩阵,因此本矩阵的原值可能会被丢弃。

Parameters

  • x: number 浮点数 x
  • y: number 浮点数 y
  • z: number 浮点数 z

makeRotationX

javascript
makeRotationX(theta: number): this;

将本矩阵设置为绕 X 轴旋转 theta(θ)角度(弧度)表示的旋转矩阵,因此本矩阵的原值可能会被丢弃。

矩阵可表示为:

(1 0 0 0,

0 cos(θ) -sin(θ) 0,

0 sin(θ) cos(θ) 0,

0 0 0 1)

Parameters

  • theta: number 浮点数 theta

makeRotationY

javascript
makeRotationY(theta: number): this;

将本矩阵设置为绕 Y 轴旋转 theta(θ)角度(弧度)表示的旋转矩阵,因此本矩阵的原值可能会被丢弃。

矩阵可表示为:

(cos(θ) 0 sin(θ) 0,

0 1 0 0,

-sin(θ) 0 cos(θ) 0,

0 0 0 1)

Parameters

  • theta: number 浮点数 theta

makeRotationZ

javascript
makeRotationZ(theta: number): this;

将本矩阵设置为绕 Z 轴旋转 theta(θ)角度(弧度)表示的旋转矩阵,因此本矩阵的原值可能会被丢弃。

矩阵可表示为:

(cos(θ) -sin(θ) 0 0,

sin(θ) cos(θ) 0 0,

0 0 1 0,

0 0 0 1)

Parameters

  • theta: number 浮点数 theta

makeRotationAxis

javascript
makeRotationAxis(axis: Vector3, angle: number): this;

将本矩阵设置为绕 axis 轴旋转 angle 角度(弧度)表示的旋转矩阵,因此本矩阵的原值可能会被丢弃。

Parameters

  • theta: number 浮点数 theta

makeScale

javascript
makeScale(x: number, y: number, z: number): this;

将本矩阵设置为由 xyz 表示的缩放矩阵,因此本矩阵的原值可能会被丢弃。

矩阵可表示为:

(x, 0, 0, 0,

0, y, 0, 0,

0, 0, z, 0,

0, 0, 0, 1)

Parameters

  • x: number 浮点数 x
  • y: number 浮点数 y
  • z: number 浮点数 z

makeShear

javascript
makeShear(x: number, y: number, z: number): this;

将本矩阵设置为由 xyz 表示的切变矩阵,因此本矩阵的原值可能会被丢弃。

矩阵可表示为:

(1, y, z, 0,

x, 1, z, 0,

x, y, 1, 0,

0, 0, 0, 1)

Parameters

  • x: number 浮点数 x
  • y: number 浮点数 y
  • z: number 浮点数 z

compose

javascript
compose(translation: Vector3, rotation: Quaternion, scale: Vector3): this;

用 translation、rotation、quaternion 构造一个新矩阵,并放入本矩阵中,因此本矩阵的原值可能会被丢弃。

Parameters

  • translation : Insight.Vector3 平移向量
  • rotation : Insight.Quaternion 旋转向量
  • scale : Insight.Vector3 缩放向量

decompose

javascript
decompose(translation: Vector3, rotation: Quaternion, scale: Vector3): void;

将本矩阵的值分解到 translation、rotation、quaternion 三个向量中。

Parameters

  • translation : Insight.Vector3 平移向量
  • rotation : Insight.Quaternion 旋转向量
  • scale : Insight.Vector3 缩放向量

makePerspective

javascript
makePerspective(left: number, right: number, bottom: number, top: number, near: number, far: number): this;

构造新的透视矩阵,并放入本矩阵中,因此本矩阵的原值可能会被丢弃。

makePerspective

javascript
makePerspective(fov: number, aspect: number, near: number, far: number): this;

构造新的透视矩阵,并放入本矩阵中,因此本矩阵的原值可能会被丢弃。

makeOrthographic

javascript
makeOrthographic(left: number, right: number, top: number, bottom: number, near: number, far: number): this;

构造新的正交矩阵,并放入本矩阵中,因此本矩阵的原值可能会被丢弃。

equals

javascript
equals(m: Matrix4): boolean;

判断是否等于另一个矩阵 m。

Parameters

  • m : Insight.Matrix4 另一个矩阵

toString

javascript
toString(): string;

按照如下的格式输出:

(n11, n12, n13, n14,

n21, n22, n23, n24,

n31, n32, n33, n34,

n41, n42, n43, n44)

fromArray

javascript
fromArray(array: number[], offset?: number): this;

从一个数组 array 中获取矩阵的每个分量的值,并填充到本矩阵中,因此本矩阵的原值可能会被丢弃。

Parameters

  • array : number[] 带有 16 个分量值的数组
  • offset?: number 可选参数,表示从数组的第 offset 个下标开始获取值,如不填则默认 0

toArray

javascript
toArray(array?: number[], offset?: number): number[];

将本矩阵中的所有分量值填充到 array 数组中。返回值为填充好的 array 数组(与参数中的 array 是同一个)。如 array 数组为空,则返回一个全新的数组。

Parameters

  • array : number[] 可选参数,待填充的数组,如不填则返回一个全新的数组
  • offset?: number 可选参数,表示从数组的第 offset 个下标开始填充值,offset 的值不能超过数组长度,否则会抛出异常。如不填则默认 0

getColumn

javascript
getColumn(index: number, b: Vector4): void;

获取矩阵的一列。

Parameters

getRow

javascript
getRow(index: number, b: Vector4): void;

获取矩阵的一行。

Parameters

setColumn

javascript
setColumn(index: number, b: Vector4): void;

设置矩阵的一列。

Parameters

setRow

javascript
setRow(index: number, b: Vector4): void;

设置矩阵的一行。

Parameters

setTRS

javascript
setTRS(pos: Vector3, q: Quaternion, s: Vector3): void;

设置矩阵平移、旋转、缩放变换。

Parameters

Static Methods


MultiplyPoint

javascript
multiplyPoint(m: Matrix4, b: Vector3): Vector3;

对一个 Vector3 进行矩阵变换,此方法会返回一个全新的向量。

Parameters

  • m : Insight.Matrix4 待计算的矩阵 m
  • b : Insight.Vector3 三维向量的值 [备注] 这个版本的效率低于 multiplyPoint3x4,但可以用于投影变换。 如果没有投影变换,可以使用 multiplyPoint3x4,以取得更高的效率。

MultiplyPoint3x4

javascript
multiplyPoint3x4(m: Matrix4, b: Vector3): Vector4;

用矩阵 m 对一个 Vector3 进行矩阵变换,此方法会返回一个全新的向量。

Parameters

  • m : Insight.Matrix4 待计算的矩阵 m
  • b : Insight.Vector3 三维向量的值 [备注] 这个版本的效率高于 multiplyPoint,但不可以用于投影变换。 如果有投影变换,不可以使用本方法。

MultiplyVector3

javascript
multiplyVector3(m: Matrix4, b: Vector3): Vector3;

用矩阵 m 对一个 Vector3 进行旋转缩放,不进行平移,此方法会返回一个全新的向量。

Parameters

  • m : Insight.Matrix4 待计算的矩阵 m
  • b : Insight.Vector3 三维向量的值

MultiplyVector4

javascript
multiplyVector4(m: Matrix4, b: Vector4): Vector4;

将矩阵 m 与向量 b 相乘,相当于 x = m*b,此方法会返回一个全新的向量。

Parameters

  • m : Insight.Matrix4 待计算的矩阵 m
  • b : Insight.Vector4 三维向量的值

LookAt

javascript
static LookAt(from: Vector3, to: Vector3, up: Vector3): Matrix4;

创建一个相机矩阵。此方法会返回一个全新的矩阵,而不会修改 matrix 的值。

Parameters

Ortho

javascript
static Ortho(left: number, right: number, bottom: number, top: number, near: number, far: number): Matrix4;

创建一个正交投影矩阵。此方法会返回一个全新的矩阵,而不会修改 matrix 的值。

Parameters

  • left : number 投影椎体左边界
  • right : number 投影椎体右边界
  • bottom : number 投影椎体下边界
  • top : number 投影椎体上边界
  • near : number 投影椎体近平面的距离
  • far : number 投影椎体远平面的距离

Perspective

javascript
static Perspective(fovy: number, aspect: number, near: number, far: number): Matrix4;

创建一个透视投影矩阵。此方法会返回一个全新的矩阵,而不会修改 matrix 的值。

Parameters

  • fov : number field of view
  • aspect : number 屏幕宽高比
  • near : number 投影椎体近平面的距离
  • far : number 投影椎体远平面的距离

Rotate

javascript
static Rotate(q: Quaternion): Matrix4;

创建旋转矩阵。此方法会返回一个全新的矩阵,而不会修改 matrix 的值。

Parameters

Scale

javascript
static Scale(s: Vector3): Matrix4;

创建缩放矩阵。此方法会返回一个全新的矩阵,而不会修改 matrix 的值。

Parameters

Translate

javascript
static Translate(s: Vector3): Matrix4;

创建平移矩阵。此方法会返回一个全新的矩阵,而不会修改 matrix 的值。

Parameters

TRS

javascript
static TRS(pos: Vector3, q: Quaternion, s: Vector3): Matrix4;

创建平移、旋转、缩放矩阵。此方法会返回一个全新的矩阵,而不会修改 matrix 的值。

Parameters