资讯 社区 文档
技术能力
语音技术
文字识别
人脸与人体
图像技术
语言与知识
视频技术

ARMat44

此类封装数学库,适用于2.6版本以上的SDK。

ARMat44表示一个四维矩阵,包含四个ARVec4型成员x、y、z、w

Fileds

类型 成员变量
ARVec4 x
ARVec4 y
ARVec4 z
ARVec4 w

ARMat44::x

获取四维矩阵中的x向量,这个向量是一个四维向量

Parameters

Returns

  • ARVec4 : 返回x分量
sample:
local x_vec = ae.ARVec4:new_local(2,1,4,9)
local y_vec = ae.ARVec4:new_local(4,1,2,2)
local z_vec = ae.ARVec4:new_local(4,1,2,1)
local w_vec = ae.ARVec4:new_local(4,1,2,3)
local data = ae.ARMat44:new_local(x_vec, y_vec, z_vec, w_vec)
 
local x = data.x

ARMat44::y

获取四维矩阵中的y向量,这个向量是一个四维向量

Parameters

Returns

  • ARVec4 : 返回y分量
sample:
local x_vec = ae.ARVec4:new_local(2,1,4,9)
local y_vec = ae.ARVec4:new_local(4,1,2,2)
local z_vec = ae.ARVec4:new_local(4,1,2,1)
local w_vec = ae.ARVec4:new_local(4,1,2,3)
local data = ae.ARMat44:new_local(x_vec, y_vec, z_vec, w_vec)

 
local y = data.y

ARMat44::z

获取四维矩阵中的z向量,这个向量是一个四维向量

Parameters

Returns

  • ARVec4 : 返回z分量
sample:
local x_vec = ae.ARVec4:new_local(2,1,4,9)
local y_vec = ae.ARVec4:new_local(4,1,2,2)
local z_vec = ae.ARVec4:new_local(4,1,2,1)
local w_vec = ae.ARVec4:new_local(4,1,2,3)
local data = ae.ARMat44:new_local(x_vec, y_vec, z_vec, w_vec)

local z = data.z

ARMat44::w

获取四维矩阵中的w向量,这个向量是一个四维向量

Parameters

Returns

  • ARVec4 : 返回w分量

DEMO:

sample:
local x_vec = ae.ARVec4:new_local(2,1,4,9)
local y_vec = ae.ARVec4:new_local(4,1,2,2)
local z_vec = ae.ARVec4:new_local(4,1,2,1)
local w_vec = ae.ARVec4:new_local(4,1,2,3)
local data = ae.ARMat44:new_local(x_vec, y_vec, z_vec, w_vec)
 
local w = data.w

Public Methods

返回类型 函数名 备注
ARMat44 ARMat44() 构造函数
ARMat44 ARMat44(ARVec4& x, ARVec4& y, ARVec4& z, ARVec4& w) 构造函数
ARMat44 inverse() 返回逆矩阵
string to_string() 转换为字符串
ARMat44 operator+(const ARMat44& src) + 号操作符
ARMat44 operator-(const ARMat44& src) - 号操作符
ARMat44 operator*(const ARMat44& src) * 号操作符(矩阵相乘)
ARVec4 operator*(const ARVec4& src) * 号操作符(矩阵乘以向量)
ARMat44 operator/(const ARMat44& src) / 号操作符
bool operator==(const ARMat44& src) ==号操作符
ARVec4& operator[](unsigned i) []号操作符
ARVec3 get_up_vector() 获取朝上的向量
ARVec3 get_down_vector() 获取朝下的向量
ARVec3 get_left_vector() 获取朝左的向量
ARVec3 get_right_vector() 获取朝右的向量
ARVec3 get_front_vector() 获取朝前的向量
ARVec3 get_back_vector() 获取朝后的向量
bool is_identity() 是否是单位矩阵
bool decompose_matrix(ARVec3& position, ARQuat& rotation, ARVec3& scale) 是否是单位矩阵
ARMat44& identity() 创建一个4维单位矩阵
ARMat44 create_look_at(ARVec3& eye_pos, ARVec3& target_center, ARVec3& up_vector) 通过相机位置朝向创建一个矩阵
ARMat44 create_from_rts(const ARVec3& rotation, const ARVec3& translation, const ARVec3& scale) 通过旋转、平移与放大向量来创建一个矩阵
ARMat44 create_scale(const ARVec3& scale) 创建一个scale矩阵
ARMat44 create_rotation(const ARVec3& axis, float angle) 创建一个旋转矩阵
ARMat44 create_translation(const ARVec3& trans) 创建一个平移矩阵

ARMat44()::ARMat44()

ARMat44 ARMat44()

构造函数,不传入任何参数,向量x、向量y、向量z和向量w的值默认为0

Parameters

Returns

  • ARMat44 : 一个新的ARMat44
sample:
local data = ae.ARMat44:new_local()

ARMat44(ARVec4& x, ARVec4& y, ARVec4& z, ARVec4& w)

ARMat44 ARMat44(ARVec4& x, ARVec4& y, ARVec4& z, ARVec4& w)

构造函数,传入三个ARVec4的向量

Parameters

  • x | ARVec4
  • y | ARVec4
  • z | ARVec4
  • w | ARVec4

Returns

  • ARMat44 : 一个新的ARMat44
sample:
local x_vec = ae.ARVec4:new_local(2,1,4,9)
local y_vec = ae.ARVec4:new_local(4,1,2,2)
local z_vec = ae.ARVec4:new_local(4,1,2,1)
local w_vec = ae.ARVec4:new_local(4,1,2,3)
local mat44 = ae.ARMat44:new_local(x_vec, y_vec, z_vec, w_vec)

ARMat44::inverse()

ARMat44 inverse()

返回该矩阵的逆矩阵

Parameters

Returns

  • ARMat44 : 返回该矩阵的逆矩阵
sample:
local x_vec = ae.ARVec4:new_local(2,1,4,9)
local y_vec = ae.ARVec4:new_local(4,1,2,2)
local z_vec = ae.ARVec4:new_local(4,1,2,1)
local w_vec = ae.ARVec4:new_local(4,1,2,3)
local mat44 = ae.ARMat44:new_local(x_vec, y_vec, z_vec, w_vec)
local inverse_mat44 = mat44:inverse()

ARMat44::to_string()

string to_string()

返回此矩阵的字符串表示

Parameters

Returns

  • string : 返回此矩阵的字符串表示
sample:
local x_vec = ae.ARVec4:new_local(2,1,4,9)
local y_vec = ae.ARVec4:new_local(4,1,2,2)
local z_vec = ae.ARVec4:new_local(4,1,2,1)
local w_vec = ae.ARVec4:new_local(4,1,2,3)
local mat44 = ae.ARMat44:new_local(x_vec, y_vec, z_vec, w_vec)
local string_mat = mat44:to_string()

ARMat44::operator+(const ARMat44& src)

ARMat44 operator+(const ARMat44& src) 重载加号运算符,两个矩阵相加,矩阵中的每一个值都对应相减

Parameters

  • src | ARMat44

Returns

  • ARMat44 : 一个新的ARMat44
sample:
-- 创建ARMat44 mat_a,mat_b
local mat_result = mat_a + mat_b

ARMat44::operator-(const ARMat44& src)

ARMat44 operator-(const ARMat44& src) 重载减号运算符,两个矩阵相减,矩阵中的每一个值都对应相减

Parameters

  • src | ARMat44

Returns

  • ARMat44 : 一个新的ARMat44
sample:
-- 创建ARMat44 mat_a,mat_b
local mat_result = mat_a - mat_b

ARMat44::operator*(const ARMat44& src)

ARMat44 operator*(const ARMat44& src) 重载乘号运算符,两个矩阵相乘,按照矩阵乘法的规则进行乘

Parameters

  • src | ARMat44

Returns

  • ARMat44 : 一个新的ARMat44
sample:
-- 创建ARMat44 mat_a,mat_b
local mat_result = mat_a * mat_b

ARMat44::operator*(const ARVec4& src)

ARVec4 operator*(const ARVec4& src) 重载乘号运算符,矩阵与向量相乘,按照矩阵向量乘法的规则进行乘

Parameters

  • src | ARVec4

Returns

  • ARVec4 : 返回一个四维向量
sample:
-- 创建ARMat44 mat
-- 创建ARVec4 vec
local result = mat * vec

ARMat44::operator/(const ARMat44& src)

ARMat44 operator/(const ARMat44& src) 重载除号运算符,两个矩阵相除,每个分量分别相除

Parameters

  • src | ARMat44

Returns

  • ARMat44 : 一个新的ARMat44
sample:
-- 创建ARMat44 mat_a,mat_b
local mat_result = mat_a / mat_b

ARMat44::operator==(const ARMat44& src)

bool operator==(const ARMat44& src) 重载等于号运算符,判断两个矩阵的每个分量是否相等

Parameters

  • src | ARMat44

Returns

  • bool : true或者false
sample:
-- 创建ARMat44 mat_a,mat_b
if (mat_a == mat_b) then

else

end

ARMat44::operator[](unsigned i)

ARVec4 operator[](unsigned i)

重载[]运算符,获取相应分量,[0]表示获取x三维向量,[1]表示获取y三维向量,[2]表示获取z三维向量,[3]表示获取w三维向量 返回一个ARVec4 注意:调用3以上会造成数组越界,是非法操作

Parameters

  • i | int : 表示序列数index

Returns

  • ARVec4 : 返回x、y、z和w的值
sample:
-- 创建ARMat44 mat_a
local x = mat_a[0]
local y = mat_a[1]
local z = mat_a[2]
local w = mat_a[3]

ARMat44::up()

ARVec3 up()

获取该矩阵的up向量

Parameters

Returns

  • ARVec3 : up向量
sample:
-- 创建ARMat44 mat44
local up = mat44:up()

ARMat44::down()

ARVec3 down()

获取该矩阵的down向量

Parameters

Returns

  • ARVec3 : down向量
sample:
-- 创建ARMat44 mat44
local down = mat44:down()

ARMat44::left()

ARVec3 left()

获取该矩阵的left向量

Parameters

Returns

  • ARVec3 : left向量
sample:
-- 创建ARMat44 mat44
local left = mat44:left()

ARMat44::right()

ARVec3 right()

获取该矩阵的right向量

Parameters

Returns

  • ARVec3 : right向量
sample:
-- 创建ARMat44 mat44
local right = mat44:right()

ARMat44::front()

ARVec3 front()

获取该矩阵的front向量

Parameters

Returns

  • ARVec3 : front向量
sample:
-- 创建ARMat44 mat44
local front = mat44:front()

ARMat44::back()

ARVec3 back()

获取该矩阵的back向量

Parameters

Returns

  • ARVec3 : back向量
sample:
-- 创建ARMat44 mat44
local back = mat44:back()

ARMat44::is_identity()

bool is_identity()

判断该矩阵是否是单位矩阵

Parameters

Returns

  • bool : true或者false
sample:
-- 创建ARMat44 mat44
local is_idt = mat44:is_identity()

ARMat44::decompose_matrix(ARVec3& position, ARQuat& rotation, ARVec3& scale)

void decompose_matrix(ARVec3& position, ARQuat& rotation, ARVec3& scale)

将该矩阵分解,把代表位置,旋转和放大的分量值给到传入的position,rotation和scale中

Parameters

  • position | ARVec3 : 代表矩阵中的平移属性
  • rotation | ARQuat : 代表矩阵中的旋转属性
  • scale | ARVec3 : 代表矩阵中的放缩属性

Returns

  • void
sample:
local t = ae.ARVec3:new_local()
local r = ae.ARQuat:new_local()
local s = ae.ARVec3:new_local()

local mat44 = scene.nodename:world_transform()

mat44:decompose_matrix(t,r,s)
ARLOG("t "..t:to_string())
ARLOG("r "..r:to_string())
ARLOG("s "..s:to_string())

ARMat44::identity()

ARMat44& identity()

创建一个单位矩阵

注意:该方法为一个静态方法,不需要ARMat44的实例来调用,直接使用ae.ARMat44调用

Parameters

Returns

  • ARMat44 : 创建一个单位矩阵
sample:
local  data = ae.ARMat44:identity()

ARMat44::create_look_at(ARVec3& eye_pos, ARVec3& target_center, ARVec3& up_vector)

ARMat44 create_look_at(ARVec3& eye_pos, ARVec3& target_center, ARVec3& up_vector)

通过相机视角的三个量来创建一个矩阵,eye_pos(相机位置), target_center(朝向),up_vector(相机up方向向量) 注意:该方法为一个静态方法,不需要ARMat44的实例来调用,直接使用ae.ARMat44调用

Parameters

  • eye_pos | ARVec3 : 相机的位置
  • target_ceter | ARVec3 : 相机朝向的位置
  • up_vector | ARVec3 : 相机up方向向量

Returns

  • ARMat44 : 一个新的ARMat44
sample:
-- 创建ARVec3 eye_pos, target_center, up_vector
local data = ae.ARMat44:create_look_at(eye_pos, target_center, up_vector)

ARMat44::create_from_trs(const ARVec3& translation, const ARQuat& rotation, const ARVec3& scale)

ARMat44 create_from_trs(const ARVec3& translation, const ARQuat& rotation, const ARVec3& scale)

通过平移、旋转与放大来创建一个矩阵

注意:该方法为一个静态方法,不需要ARMat44的实例来调用,直接使用ae.ARMat44调用

Parameters

  • translation | ARVec3 : 平移量
  • rotation | ARQuat : 旋转量
  • scale | ARVec3 : 放大量

Returns

  • ARMat44 : 一个新的ARMat44
sample:
local t = ae.ARVec3:new_local()
local r = ae.ARQuat:new_local()
local s = ae.ARVec3:new_local()

local mat44 = scene.node_1:world_transform()
mat44:decompose_matrix(t,r,s)

local mat44_2 = ae.ARMat44:create_from_trs(t,r,s)

-- mat44_2 与mat44应该相等

ARMat44::create_scale(const ARVec3& scale)

ARMat44 create_scale(const ARVec3& scale)

通过放大向量 scale 来创建一个矩阵

Parameters

  • scale | ARVec3 : 放大向量

Returns

  • ARMat44 : 一个新的ARMat44
sample:
-- 创建ARVec3 scale
local data = ae.ARMat44:create_scale(scale)

ARMat44::create_rotation(const ARVec3& axis, float angle)

ARMat44 create_rotation(const ARVec3& axis, float angle)

通过旋转轴 axis 与绕轴旋转的角度 angle 创建一个矩阵

注意:该方法为一个静态方法,不需要ARMat44的实例来调用,直接使用ae.ARMat44调用

Parameters

  • axis | ARVec3 : 旋转轴
  • angle | float : 旋转角度

Returns

  • ARMat44 : 一个新的ARMat44
sample:
--创建ARVec3 axis 
--设置角度 angle
local data = ae.ARMat44:create_rotation(axis, angle)

ARMat44::create_translation(const ARVec3& trans)

ARMat44 create_translation(const ARVec3& trans)

通过平移向量trans来创建一个矩阵

注意:该方法为一个静态方法,不需要ARMat44的实例来调用,直接使用ae.ARMat44调用

Parameters

  • trans | ARVec3 : 平移向量

Returns

  • ARMat44 : 一个新的ARMat44
sample:
-- 创建ARVec3 trans
local data = ae.ARMat44:create_translation(trans)
上一篇
ARMat33
下一篇
ARQuat四元数