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)