ARMat44
所有文档

          AR开放平台

          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四元数