亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? _matrix44.h

?? 奇跡世界公用文件源代碼,研究網(wǎng)絡(luò)游戲的朋友可以研究下
?? H
?? 第 1 頁 / 共 2 頁
字號(hào):
#ifndef _MATRIX44_H
#define _MATRIX44_H
//------------------------------------------------------------------------------
/**
    Generic matrix44 class.

    @author
    - RadonLabs GmbH 

    @since
    - 2005.7.06
    @remarks
    - 瘤肯 眠啊 
*/

#include "_vector4.h"
#include "_vector3.h"
#include "quaternion.h"
#include "euler.h"
#include "matrixdefs.h"

static float _matrix44_ident[16] = 
{
    1.0f, 0.0f, 0.0f, 0.0f,
    0.0f, 1.0f, 0.0f, 0.0f,
    0.0f, 0.0f, 1.0f, 0.0f,
    0.0f, 0.0f, 0.0f, 1.0f,
};

//------------------------------------------------------------------------------
class _matrix44 
{
public:
    /// constructor 1
    _matrix44();
    /// constructor 2
    _matrix44(const _vector4& v0, const _vector4& v1, const _vector4& v2, const _vector4& v3);
    /// constructor 3
    _matrix44(const _matrix44& m1);
    /// constructor 4
    _matrix44(float _m11, float _m12, float _m13, float _m14,
              float _m21, float _m22, float _m23, float _m24,
              float _m31, float _m32, float _m33, float _m34,
              float _m41, float _m42, float _m43, float _m44);
    /// construct from quaternion
    _matrix44(const quaternion& q);
    /// convert to quaternion
    quaternion get_quaternion() const;
    /// set 1
    void set(const _vector4& v0, const _vector4& v1, const _vector4& v2, const _vector4& v3);
    /// set 2
    void set(const _matrix44& m1);
    /// set 3
    void set(float _m11, float _m12, float _m13, float _m14,
             float _m21, float _m22, float _m23, float _m24,
             float _m31, float _m32, float _m33, float _m34,
             float _m41, float _m42, float _m43, float _m44);
    /// set from quaternion
    void set(const quaternion& q);
    /// set to identity
    void ident();
    /// transpose
    void transpose();
    /// determinant
    float det();
    /// full invert
    void invert(void);
    /// quick invert (if 3x3 rotation and translation)
    void invert_simple(void);
    /// quick multiplication, assumes that M14==M24==M34==0 and M44==1
    void mult_simple(const _matrix44& m1);
    /// transform vector3, projecting back into w=1
    _vector3 transform_coord(const _vector3& v) const;
    /// return x component
    _vector3 x_component() const;
    /// return y component
    _vector3 y_component() const;
    /// return z component
    _vector3 z_component() const;
    /// return translate component
    _vector3 pos_component() const;
    /// rotate around global x
    void rotate_x(const float a);
    /// rotate around global y
    void rotate_y(const float a);
    /// rotate around global z
    void rotate_z(const float a);
    /// rotate about any axis
    void rotate(const _vector3& vec, float a);
    /// translate
    void translate(const _vector3& t);
    /// set absolute translation
    void set_translation(const _vector3& t);
    /// scale
    void scale(const _vector3& s);
    /// lookat in a left-handed coordinate system
    void lookatLh(const _vector3& to, const _vector3& up);
    /// lookat in a right-handed coordinate system
    void lookatRh(const _vector3& to, const _vector3& up);
    /// create left-handed field-of-view perspective projection matrix
    void perspFovLh(float fovY, float aspect, float zn, float zf);
    /// create right-handed field-of-view perspective projection matrix
    void perspFovRh(float fovY, float aspect, float zn, float zf);
    /// create left-handed orthogonal projection matrix
    void orthoLh(float w, float h, float zn, float zf);
    /// create right-handed orthogonal projection matrix
    void orthoRh(float w, float h, float zn, float zf);
    /// restricted lookat
    void billboard(const _vector3& to, const _vector3& up);
    /// inplace matrix mulitply
    void operator *= (const _matrix44& m1);
    /// multiply source vector into target vector, eliminates tmp vector
    void mult(const _vector4& src, _vector4& dst) const;
    /// multiply source vector into target vector, eliminates tmp vector
    void mult(const _vector3& src, _vector3& dst) const;

    float m[4][4];
};

//------------------------------------------------------------------------------
/**
*/
inline
_matrix44::_matrix44()
{
    memcpy(&(m[0][0]), _matrix44_ident, sizeof(_matrix44_ident));
}

//------------------------------------------------------------------------------
/**
*/
inline
_matrix44::_matrix44(const _vector4& v0, const _vector4& v1, const _vector4& v2, const _vector4& v3)
{
    M11 = v0.x; M12 = v0.y; M13 = v0.z; M14 = v0.w;
    M21 = v1.x; M22 = v1.y; M23 = v1.z; M24 = v1.w;
    M31 = v2.x; M32 = v2.y; M33 = v2.z; M34 = v2.w;
    M41 = v3.x; M42 = v3.y; M43 = v3.z; M44 = v3.w;
}

//------------------------------------------------------------------------------
/**
*/
inline
_matrix44::_matrix44(const _matrix44& m1) 
{
    memcpy(m, &(m1.m[0][0]), 16 * sizeof(float));
}

//------------------------------------------------------------------------------
/**
*/
inline
_matrix44::_matrix44(float _m11, float _m12, float _m13, float _m14,
                     float _m21, float _m22, float _m23, float _m24,
                     float _m31, float _m32, float _m33, float _m34,
                     float _m41, float _m42, float _m43, float _m44)
{
    M11 = _m11; M12 = _m12; M13 = _m13; M14 = _m14;
    M21 = _m21; M22 = _m22; M23 = _m23; M24 = _m24;
    M31 = _m31; M32 = _m32; M33 = _m33; M34 = _m34;
    M41 = _m41; M42 = _m42; M43 = _m43; M44 = _m44;
}

//------------------------------------------------------------------------------
/**
*/
inline
_matrix44::_matrix44(const quaternion& q) 
{
    float wx, wy, wz, xx, yy, yz, xy, xz, zz, x2, y2, z2;
    x2 = q.x + q.x; y2 = q.y + q.y; z2 = q.z + q.z;
    xx = q.x * x2;   xy = q.x * y2;   xz = q.x * z2;
    yy = q.y * y2;   yz = q.y * z2;   zz = q.z * z2;
    wx = q.w * x2;   wy = q.w * y2;   wz = q.w * z2;

    m[0][0] = 1.0f - (yy + zz);
    m[1][0] = xy - wz;
    m[2][0] = xz + wy;

    m[0][1] = xy + wz;
    m[1][1] = 1.0f - (xx + zz);
    m[2][1] = yz - wx;

    m[0][2] = xz - wy;
    m[1][2] = yz + wx;
    m[2][2] = 1.0f - (xx + yy);

    m[3][0] = m[3][1] = m[3][2] = 0.0f;
    m[0][3] = m[1][3] = m[2][3] = 0.0f;
    m[3][3] = 1.0f;
}

//------------------------------------------------------------------------------
/**
    convert orientation of 4x4 matrix into quaterion,
    4x4 matrix must not be scaled!
*/
inline
quaternion 
_matrix44::get_quaternion() const
{
    float qa[4];
    float tr = m[0][0] + m[1][1] + m[2][2];
    if (tr > 0.0f) 
    {
        float s = n_sqrt (tr + 1.0f);
        qa[3] = s * 0.5f;
        s = 0.5f / s;
        qa[0] = (m[1][2] - m[2][1]) * s;
        qa[1] = (m[2][0] - m[0][2]) * s;
        qa[2] = (m[0][1] - m[1][0]) * s;
    } 
    else 
    {
        int i, j, k, nxt[3] = {1,2,0};
        i = 0;
        if (m[1][1] > m[0][0]) i=1;
        if (m[2][2] > m[i][i]) i=2;
        j = nxt[i];
        k = nxt[j];
        float s = n_sqrt((m[i][i] - (m[j][j] + m[k][k])) + 1.0f);
        qa[i] = s * 0.5f;
        s = 0.5f / s;
        qa[3] = (m[j][k] - m[k][j])* s;
        qa[j] = (m[i][j] + m[j][i]) * s;
        qa[k] = (m[i][k] + m[k][i]) * s;
    }
    quaternion q(qa[0],qa[1],qa[2],qa[3]);
    return q;
}

//------------------------------------------------------------------------------
/**
*/
inline
void 
_matrix44::set(const _vector4& v0, const _vector4& v1, const _vector4& v2, const _vector4& v3) 
{
    M11=v0.x; M12=v0.y; M13=v0.z, M14=v0.w;
    M21=v1.x; M22=v1.y; M23=v1.z; M24=v1.w;
    M31=v2.x; M32=v2.y; M33=v2.z; M34=v2.w;
    M41=v3.x; M42=v3.y; M43=v3.z; M44=v3.w;
}

//------------------------------------------------------------------------------
/**
*/
inline
void 
_matrix44::set(const _matrix44& m1) 
{
    memcpy(m, &(m1.m[0][0]), 16*sizeof(float));
}

//------------------------------------------------------------------------------
/**
*/
inline
void
_matrix44::set(float _m11, float _m12, float _m13, float _m14,
               float _m21, float _m22, float _m23, float _m24,
               float _m31, float _m32, float _m33, float _m34,
               float _m41, float _m42, float _m43, float _m44)
{
    M11=_m11; M12=_m12; M13=_m13; M14=_m14;
    M21=_m21; M22=_m22; M23=_m23; M24=_m24;
    M31=_m31; M32=_m32; M33=_m33; M34=_m34;
    M41=_m41; M42=_m42; M43=_m43; M44=_m44;
}

//------------------------------------------------------------------------------
/**
*/
inline
void 
_matrix44::set(const quaternion& q) 
{
    float wx, wy, wz, xx, yy, yz, xy, xz, zz, x2, y2, z2;
    x2 = q.x + q.x; y2 = q.y + q.y; z2 = q.z + q.z;
    xx = q.x * x2;   xy = q.x * y2;   xz = q.x * z2;
    yy = q.y * y2;   yz = q.y * z2;   zz = q.z * z2;
    wx = q.w * x2;   wy = q.w * y2;   wz = q.w * z2;

    m[0][0] = 1.0f - (yy + zz);
    m[1][0] = xy - wz;
    m[2][0] = xz + wy;

    m[0][1] = xy + wz;
    m[1][1] = 1.0f - (xx + zz);
    m[2][1] = yz - wx;

    m[0][2] = xz - wy;
    m[1][2] = yz + wx;
    m[2][2] = 1.0f - (xx + yy);

    m[3][0] = m[3][1] = m[3][2] = 0.0f;
    m[0][3] = m[1][3] = m[2][3] = 0.0f;
    m[3][3] = 1.0f;
}

//------------------------------------------------------------------------------
/**
*/
inline
void 
_matrix44::ident() 
{
    memcpy(&(m[0][0]), _matrix44_ident, sizeof(_matrix44_ident));
}

//------------------------------------------------------------------------------
/**
*/
inline
void 
_matrix44::transpose() 
{
    #undef n_swap
    #define n_swap(x,y) { float t=x; x=y; y=t; }
    n_swap(M12, M21);
    n_swap(M13, M31);
    n_swap(M14, M41);
    n_swap(M23, M32);
    n_swap(M24, M42);
    n_swap(M34, M43);
}

//------------------------------------------------------------------------------
/**
*/
inline
float 
_matrix44::det() 
{
    return
        (M11 * M22 - M12 * M21) * (M33 * M44 - M34 * M43)
       -(M11 * M23 - M13 * M21) * (M32 * M44 - M34 * M42)
       +(M11 * M24 - M14 * M21) * (M32 * M43 - M33 * M42)
       +(M12 * M23 - M13 * M22) * (M31 * M44 - M34 * M41)
       -(M12 * M24 - M14 * M22) * (M31 * M43 - M33 * M41)
       +(M13 * M24 - M14 * M23) * (M31 * M42 - M32 * M41);
}

//------------------------------------------------------------------------------
/**
*/
inline
void
_matrix44::invert() 
{
    float s = det();
    if (s == 0.0) return;
    s = 1/s;
    this->set(
        s*(M22*(M33*M44 - M34*M43) + M23*(M34*M42 - M32*M44) + M24*(M32*M43 - M33*M42)),
        s*(M32*(M13*M44 - M14*M43) + M33*(M14*M42 - M12*M44) + M34*(M12*M43 - M13*M42)),
        s*(M42*(M13*M24 - M14*M23) + M43*(M14*M22 - M12*M24) + M44*(M12*M23 - M13*M22)),
        s*(M12*(M24*M33 - M23*M34) + M13*(M22*M34 - M24*M32) + M14*(M23*M32 - M22*M33)),
        s*(M23*(M31*M44 - M34*M41) + M24*(M33*M41 - M31*M43) + M21*(M34*M43 - M33*M44)),
        s*(M33*(M11*M44 - M14*M41) + M34*(M13*M41 - M11*M43) + M31*(M14*M43 - M13*M44)),
        s*(M43*(M11*M24 - M14*M21) + M44*(M13*M21 - M11*M23) + M41*(M14*M23 - M13*M24)),
        s*(M13*(M24*M31 - M21*M34) + M14*(M21*M33 - M23*M31) + M11*(M23*M34 - M24*M33)),
        s*(M24*(M31*M42 - M32*M41) + M21*(M32*M44 - M34*M42) + M22*(M34*M41 - M31*M44)),
        s*(M34*(M11*M42 - M12*M41) + M31*(M12*M44 - M14*M42) + M32*(M14*M41 - M11*M44)),
        s*(M44*(M11*M22 - M12*M21) + M41*(M12*M24 - M14*M22) + M42*(M14*M21 - M11*M24)),
        s*(M14*(M22*M31 - M21*M32) + M11*(M24*M32 - M22*M34) + M12*(M21*M34 - M24*M31)),
        s*(M21*(M33*M42 - M32*M43) + M22*(M31*M43 - M33*M41) + M23*(M32*M41 - M31*M42)),
        s*(M31*(M13*M42 - M12*M43) + M32*(M11*M43 - M13*M41) + M33*(M12*M41 - M11*M42)),
        s*(M41*(M13*M22 - M12*M23) + M42*(M11*M23 - M13*M21) + M43*(M12*M21 - M11*M22)),
        s*(M11*(M22*M33 - M23*M32) + M12*(M23*M31 - M21*M33) + M13*(M21*M32 - M22*M31)));
}

//------------------------------------------------------------------------------
/**
    inverts a 4x4 matrix consisting of a 3x3 rotation matrix and
    a translation (eg. everything that has [0,0,0,1] as
    the rightmost column) MUCH cheaper then a real 4x4 inversion
*/
inline
void 
_matrix44::invert_simple() 
{
    float s = det();
    if (s == 0.0f) return;
    s = 1.0f/s;
    this->set(
        s * ((M22 * M33) - (M23 * M32)),
        s * ((M32 * M13) - (M33 * M12)),
        s * ((M12 * M23) - (M13 * M22)),
        0.0f,
        s * ((M23 * M31) - (M21 * M33)),
        s * ((M33 * M11) - (M31 * M13)),
        s * ((M13 * M21) - (M11 * M23)),
        0.0f,
        s * ((M21 * M32) - (M22 * M31)),
        s * ((M31 * M12) - (M32 * M11)),
        s * ((M11 * M22) - (M12 * M21)),
        0.0f,
        s * (M21*(M33*M42 - M32*M43) + M22*(M31*M43 - M33*M41) + M23*(M32*M41 - M31*M42)),
        s * (M31*(M13*M42 - M12*M43) + M32*(M11*M43 - M13*M41) + M33*(M12*M41 - M11*M42)),
        s * (M41*(M13*M22 - M12*M23) + M42*(M11*M23 - M13*M21) + M43*(M12*M21 - M11*M22)),
        1.0f);
}

//------------------------------------------------------------------------------
/**
    optimized multiplication, assumes that M14==M24==M34==0 AND M44==1
*/
inline
void
_matrix44::mult_simple(const _matrix44& m1) 
{
    int i;
    for (i=0; i<4; i++) 

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲国产欧美在线| 日韩一级完整毛片| 国产乱子伦一区二区三区国色天香| 久久久久久久久一| 中文字幕亚洲不卡| 国产精品美日韩| 91精品国产色综合久久不卡蜜臀| 美腿丝袜亚洲色图| 亚洲欧美日韩国产一区二区三区 | 色综合网站在线| 国产电影一区二区三区| 国产精品久久久久久久浪潮网站 | 亚洲国产高清在线| 欧美成人精品高清在线播放| 国产日产欧美一区二区三区| 夜夜夜精品看看| 国产一区二区三区四| 一本到高清视频免费精品| 91久久精品一区二区| 在线免费精品视频| 在线观看日韩高清av| 欧美日韩国产不卡| 欧美一区二区三区思思人| 91 com成人网| 久久精品亚洲精品国产欧美kt∨| 国产色爱av资源综合区| 日韩免费观看高清完整版 | 日日夜夜一区二区| 蜜臀91精品一区二区三区| 亚洲不卡一区二区三区| 久久精品99国产国产精| 国产成人综合网| 日本高清视频一区二区| 91精品国产91久久久久久一区二区| 欧美久久一区二区| 久久久精品人体av艺术| 亚洲裸体在线观看| 蜜桃视频第一区免费观看| 国产91精品一区二区麻豆网站| 一本大道综合伊人精品热热| 91精品国产综合久久精品麻豆 | 丰满亚洲少妇av| 欧美日韩国产免费一区二区| 久久久久一区二区三区四区| 一区二区三区资源| 国产suv精品一区二区883| 欧美精品少妇一区二区三区| 国产午夜精品福利| 久久精品噜噜噜成人88aⅴ| 色久综合一二码| 亚洲欧美在线观看| 国产精品小仙女| 国产亚洲欧洲一区高清在线观看| 国产精品无人区| 美腿丝袜亚洲一区| 欧美日韩成人高清| 亚洲色图欧洲色图婷婷| 国产麻豆精品theporn| 91精品国产免费| 亚洲成人一二三| 91福利区一区二区三区| 国产精品欧美综合在线| 国产精品一区二区三区网站| 6080午夜不卡| 日韩精品乱码av一区二区| 色婷婷亚洲综合| 亚洲午夜在线视频| 欧美性xxxxxxxx| 偷拍亚洲欧洲综合| 91精品国模一区二区三区| 亚洲成人精品在线观看| 精品国产一区二区在线观看| 欧美久久久久免费| 国产精品久久久久久久久搜平片 | 精品视频资源站| 亚洲国产日韩综合久久精品| 欧美日韩国产成人在线免费| 日韩高清不卡一区二区| 日韩区在线观看| 国产一区欧美一区| 日韩毛片精品高清免费| 欧美日韩二区三区| 九九国产精品视频| 亚洲视频一二区| 欧美日韩精品免费观看视频| 日韩电影在线观看一区| 欧美性受xxxx| 首页亚洲欧美制服丝腿| 欧美sm极限捆绑bd| 成人国产一区二区三区精品| 亚洲高清视频的网址| 在线综合+亚洲+欧美中文字幕| 国产乱色国产精品免费视频| 有坂深雪av一区二区精品| 在线成人小视频| 99久久夜色精品国产网站| 日日欢夜夜爽一区| 中文字幕一区二区日韩精品绯色| 在线播放/欧美激情| 成人精品在线视频观看| 日产国产高清一区二区三区| 国产精品久久午夜夜伦鲁鲁| 精品少妇一区二区三区在线视频 | 日韩精品一区二区三区蜜臀| 中文字幕免费一区| 日韩免费观看2025年上映的电影| 欧美乱熟臀69xxxxxx| 欧美三级三级三级爽爽爽| 欧美伊人精品成人久久综合97| 99热在这里有精品免费| 91色综合久久久久婷婷| 色欧美乱欧美15图片| 欧美色国产精品| 欧美高清你懂得| 久久精品综合网| 国产精品美女视频| 亚洲欧洲制服丝袜| 三级在线观看一区二区| 久久精品久久精品| 成人亚洲一区二区一| 欧洲日韩一区二区三区| 日韩一区二区不卡| 精品剧情v国产在线观看在线| 亚洲欧洲国产日韩| 色94色欧美sute亚洲线路一ni| 午夜影院在线观看欧美| 午夜精品一区二区三区三上悠亚| 亚洲国产三级在线| 青娱乐精品视频| 国产一区二区在线影院| 国产精品自拍在线| 成人性生交大片免费看中文网站| 成人免费毛片a| 久久亚洲综合av| 久久免费电影网| 亚洲另类色综合网站| 亚洲在线视频网站| 精品一区二区三区在线播放视频 | 麻豆91在线观看| 风间由美一区二区三区在线观看| 91在线播放网址| 欧美一卡二卡三卡四卡| 久久久91精品国产一区二区精品 | 91女厕偷拍女厕偷拍高清| 91麻豆精品国产91久久久久| 国产日产欧美一区二区三区| 亚洲免费av在线| 国产一本一道久久香蕉| 欧美日韩国产免费| 国产精品卡一卡二| 免费高清在线一区| 色综合亚洲欧洲| 国产精品久久久久影院老司| 日本欧美在线观看| 91成人免费网站| 亚洲国产成人午夜在线一区| 男女男精品视频| 91美女在线看| 99久久伊人网影院| 欧美精品一区二区三区蜜桃视频 | 国产精品伦一区二区三级视频| 三级影片在线观看欧美日韩一区二区| 国内精品国产成人| 91精品国产高清一区二区三区蜜臀 | 丁香一区二区三区| 亚洲精品在线三区| 日本不卡视频在线| 欧美日韩aaaaaa| 亚洲成年人影院| 欧美伦理影视网| 秋霞影院一区二区| 日韩精品中文字幕在线不卡尤物| 亚洲va中文字幕| 欧美自拍偷拍午夜视频| 久久精品一二三| 精品一区二区三区免费毛片爱| 波多野结衣中文字幕一区| 91精品在线一区二区| 国产午夜精品一区二区三区视频 | 欧美成人福利视频| 久久99精品久久久久| 精品免费99久久| 粉嫩13p一区二区三区| 国产精品毛片无遮挡高清| 欧美三级视频在线观看| 亚洲成人免费视| 日韩免费高清电影| 国产999精品久久| 亚洲九九爱视频| 51精品久久久久久久蜜臀| 激情图区综合网| 国产午夜久久久久| 欧美日韩一级视频| 丝袜亚洲另类丝袜在线| 欧美老年两性高潮| 久久99精品国产麻豆婷婷洗澡| 国产精品视频yy9299一区| 99久久国产综合精品麻豆| 日韩国产精品91| **网站欧美大片在线观看|