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

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

?? _matrix33.h

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

    @author
    - RadonLabs GmbH 

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

#include "_vector3.h"
#include "quaternion.h"
#include "euler.h"
#include "matrixdefs.h"
#include <memory.h>

static float _matrix33_ident[9] = 
{
    1.0f, 0.0f, 0.0f,
    0.0f, 1.0f, 0.0f,
    0.0f, 0.0f, 1.0f,
};

//------------------------------------------------------------------------------
class _matrix33 
{
public:
    /// constructor 1
    _matrix33();
    /// constructor 2
    _matrix33(const _vector3& v0, const _vector3& v1, const _vector3& v2);
    /// constructor 3
    _matrix33(const _matrix33& mx);
    /// constructor 4
    _matrix33(float _m11, float _m12, float _m13, float _m21, float _m22, float _m23, float _m31, float _m32, float _m33);
    /// constructor 5
    _matrix33(const quaternion& q);
    /// get as quaternion
    quaternion get_quaternion() const;
    /// get as euler representation
    _vector3 to_euler() const;
    /// set as euler
    void from_euler(const _vector3& ea);
    /// unrestricted lookat
    void lookat(const _vector3& from, const _vector3& to, const _vector3& up);
    /// restricted lookat (billboard)
    void billboard(const _vector3& from, const _vector3& to, const _vector3& up);
    /// set 1
    void set(float m11, float m12, float m13, float m21, float m22, float m23, float m31, float m32, float m33);
    /// set 2
    void set(const _vector3& v0, const _vector3& v1, const _vector3& v2);
    /// set 3
    void set(const _matrix33& m1);
    /// set to identity
    void ident();
    /// set to transpose
    void transpose();
    /// is orthonormal?
    bool orthonorm(float limit);
    /// scale
    void scale(const _vector3& s);
    /// rotate about global x
    void rotate_x(const float a);
    /// rotates matrix about global y
    void rotate_y(const float a);
    /// rotate about global z
    void rotate_z(const float a);
    /// rotate about local x (not very fast)
    void rotate_local_x(const float a);
    /// rotate about local y (not very fast)
    void rotate_local_y(const float a);
    /// rotate about local z (not very fast)
    void rotate_local_z(const float a);
    /// rotate about any axis
    void rotate(const _vector3& vec, float a);
    /// get x component
    _vector3 x_component(void) const;
    /// get y component
    _vector3 y_component(void) const;
    /// get z component
    _vector3 z_component(void) const;
    // inplace matrix multiply
    void operator *= (const _matrix33& m1);
    /// multiply source vector into target vector
    void mult(const _vector3& src, _vector3& dst) const;
    /// translate, this treats the matrix as a 2x2 rotation + translate matrix
    void translate(const _vector2& t);

    float m[3][3];
};

//------------------------------------------------------------------------------
/**
*/
static 
inline 
_matrix33
operator * (const _matrix33& m0, const _matrix33& m1) 
{
    _matrix33 m2(
        m0.m[0][0]*m1.m[0][0] + m0.m[0][1]*m1.m[1][0] + m0.m[0][2]*m1.m[2][0],
        m0.m[0][0]*m1.m[0][1] + m0.m[0][1]*m1.m[1][1] + m0.m[0][2]*m1.m[2][1],
        m0.m[0][0]*m1.m[0][2] + m0.m[0][1]*m1.m[1][2] + m0.m[0][2]*m1.m[2][2],

        m0.m[1][0]*m1.m[0][0] + m0.m[1][1]*m1.m[1][0] + m0.m[1][2]*m1.m[2][0],
        m0.m[1][0]*m1.m[0][1] + m0.m[1][1]*m1.m[1][1] + m0.m[1][2]*m1.m[2][1],
        m0.m[1][0]*m1.m[0][2] + m0.m[1][1]*m1.m[1][2] + m0.m[1][2]*m1.m[2][2],

        m0.m[2][0]*m1.m[0][0] + m0.m[2][1]*m1.m[1][0] + m0.m[2][2]*m1.m[2][0],
        m0.m[2][0]*m1.m[0][1] + m0.m[2][1]*m1.m[1][1] + m0.m[2][2]*m1.m[2][1],
        m0.m[2][0]*m1.m[0][2] + m0.m[2][1]*m1.m[1][2] + m0.m[2][2]*m1.m[2][2]
    );
    return m2;
}

//------------------------------------------------------------------------------
/**
*/
static 
inline 
_vector3 operator * (const _matrix33& m, const _vector3& v)
{
    return _vector3(
        m.M11*v.x + m.M21*v.y + m.M31*v.z,
        m.M12*v.x + m.M22*v.y + m.M32*v.z,
        m.M13*v.x + m.M23*v.y + m.M33*v.z);
};

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

//------------------------------------------------------------------------------
/**
*/
inline
_matrix33::_matrix33(const _vector3& v0, const _vector3& v1, const _vector3& v2) 
{
    M11=v0.x; M12=v0.y; M13=v0.z;
    M21=v1.x; M22=v1.y; M23=v1.z;
    M31=v2.x; M32=v2.y; M33=v2.z;
}

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

//------------------------------------------------------------------------------
/**
*/
inline
_matrix33::_matrix33(float _m11, float _m12, float _m13,
                     float _m21, float _m22, float _m23,
                     float _m31, float _m32, float _m33)
{
    M11=_m11; M12=_m12; M13=_m13;
    M21=_m21; M22=_m22; M23=_m23;
    M31=_m31; M32=_m32; M33=_m33;
}

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

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

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

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

//------------------------------------------------------------------------------
/**
*/
inline
quaternion 
_matrix33::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
_vector3
_matrix33::to_euler() const
{    
    _vector3 ea;
    
    // work on matrix with flipped row/columns
    _matrix33 tmp(*this);
    tmp.transpose();

    int i,j,k,h,n,s,f;
    EulGetOrd(EulOrdXYZs,i,j,k,h,n,s,f);
    if (s==EulRepYes) 
    {
        double sy = (float) sqrt(tmp.M12 * tmp.M12 + tmp.M13 * tmp.M13);
        if (sy > 16*FLT_EPSILON) 
        {
            ea.x = (float) atan2(tmp.M12, tmp.M13);
            ea.y = (float) atan2((float)sy, tmp.M11);
            ea.z = (float) atan2(tmp.M21, -tmp.M31);
        } else {
            ea.x = (float) atan2(-tmp.M23, tmp.M22);
            ea.y = (float) atan2((float)sy, tmp.M11);
            ea.z = 0;
        }
    } 
    else 
    {
        double cy = sqrt(tmp.M11 * tmp.M11 + tmp.M21 * tmp.M21);
        if (cy > 16*FLT_EPSILON) 
        {
            ea.x = (float) atan2(tmp.M32, tmp.M33);
            ea.y = (float) atan2(-tmp.M31, (float)cy);
            ea.z = (float) atan2(tmp.M21, tmp.M11);
        } 
        else 
        {
            ea.x = (float) atan2(-tmp.M23, tmp.M22);
            ea.y = (float) atan2(-tmp.M31, (float)cy);
            ea.z = 0;
        }
    }
    if (n==EulParOdd) {ea.x = -ea.x; ea.y = - ea.y; ea.z = -ea.z;}
    if (f==EulFrmR) {float t = ea.x; ea.x = ea.z; ea.z = t;}

    return ea;
}

//------------------------------------------------------------------------------
/**
*/
inline
void 
_matrix33::from_euler(const _vector3& ea) 
{
    _vector3 tea = ea;
    double ti, tj, th, ci, cj, ch, si, sj, sh, cc, cs, sc, ss;
    int i,j,k,h,n,s,f;
    EulGetOrd(EulOrdXYZs,i,j,k,h,n,s,f);
    if (f==EulFrmR) {float t = ea.x; tea.x = ea.z; tea.z = t;}
    if (n==EulParOdd) {tea.x = -ea.x; tea.y = -ea.y; tea.z = -ea.z;}
    ti = tea.x;   tj = tea.y;   th = tea.z;
    ci = cos(ti); cj = cos(tj); ch = cos(th);
    si = sin(ti); sj = sin(tj); sh = sin(th);
    cc = ci*ch; cs = ci*sh; sc = si*ch; ss = si*sh;
    if (s==EulRepYes) 
    {
        M11 = (float)(cj);     M12 = (float)(sj*si);     M13 = (float)(sj*ci);
        M21 = (float)(sj*sh);  M22 = (float)(-cj*ss+cc); M23 = (float)(-cj*cs-sc);
        M31 = (float)(-sj*ch); M23 = (float)( cj*sc+cs); M33 = (float)( cj*cc-ss);
    } 
    else 
    {
        M11 = (float)(cj*ch); M12 = (float)(sj*sc-cs); M13 = (float)(sj*cc+ss);
        M21 = (float)(cj*sh); M22 = (float)(sj*ss+cc); M23 = (float)(sj*cs-sc);
        M31 = (float)(-sj);   M32 = (float)(cj*si);    M33 = (float)(cj*ci);
    }

    // flip row/column
    this->transpose();
}

//------------------------------------------------------------------------------
/**
*/
inline
void 
_matrix33::lookat(const _vector3& from, const _vector3& to, const _vector3& up) 
{
    _vector3 z(from - to);
    z.norm();

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产丝袜在线精品| 免费成人美女在线观看.| 免费看日韩精品| 91色视频在线| 久久久91精品国产一区二区三区| 亚洲一区二区三区四区五区中文| 国产成人午夜高潮毛片| 日韩一卡二卡三卡四卡| 亚洲黄色片在线观看| 成人黄页在线观看| www国产精品av| 日韩av中文字幕一区二区三区 | 亚洲精品美国一| 国产99久久久国产精品免费看| 在线播放日韩导航| 一区二区三区在线看| k8久久久一区二区三区| 久久久久久久综合色一本| 奇米精品一区二区三区在线观看一| 日本道精品一区二区三区| 综合中文字幕亚洲| 成人开心网精品视频| 国产视频一区二区在线| 看片网站欧美日韩| 91精品在线麻豆| 亚洲成人精品一区二区| 99国产欧美久久久精品| 国产欧美日韩另类视频免费观看| 久热成人在线视频| 日韩免费一区二区| 蜜臀av性久久久久蜜臀aⅴ四虎| 欧美人伦禁忌dvd放荡欲情| 日韩毛片视频在线看| eeuss影院一区二区三区| 国产日韩精品久久久| 国产一区二区导航在线播放| xfplay精品久久| 黄色精品一二区| 26uuu成人网一区二区三区| 老色鬼精品视频在线观看播放| 日韩一级在线观看| 精品影院一区二区久久久| 日韩亚洲欧美一区| 极品少妇一区二区三区精品视频| 久久亚洲综合色一区二区三区| 黄色日韩三级电影| 日本一区二区久久| 99精品视频一区| 亚洲美女视频在线| 欧美性三三影院| 午夜久久久影院| 日韩欧美一区在线观看| 国产在线精品一区二区三区不卡| 精品粉嫩超白一线天av| 国产精品一区二区久久精品爱涩 | 欧美日韩国产片| 午夜精品福利一区二区蜜股av| 91精品国产综合久久久久久| 蜜桃视频在线一区| 国产网红主播福利一区二区| av综合在线播放| 洋洋成人永久网站入口| 91精品国产免费| 国产综合色视频| 一区视频在线播放| 欧美色图12p| 韩国成人在线视频| 国产精品久久久久毛片软件| 在线观看国产精品网站| 蜜臀av性久久久久蜜臀aⅴ流畅| 久久久精品黄色| 色婷婷综合久色| 日韩成人精品在线观看| 国产视频一区二区三区在线观看| 97久久超碰精品国产| 亚瑟在线精品视频| 久久久久国产精品麻豆ai换脸 | 成人污视频在线观看| 一区二区三区四区不卡在线| 91精品国产综合久久久久久| 国产传媒一区在线| 亚洲午夜精品网| 精品少妇一区二区三区在线播放| 国产成人精品影院| 亚洲一区视频在线观看视频| 精品欧美黑人一区二区三区| 99精品视频在线观看| 免费成人av在线| 国产精品乱码一区二区三区软件| 欧美日韩在线亚洲一区蜜芽| 国产精品1区二区.| 亚洲成av人片一区二区| 国产欧美一区二区三区鸳鸯浴| 欧美怡红院视频| 国产成人综合在线| 天堂蜜桃91精品| 国产精品理伦片| 日韩一区二区三区视频在线| 成人爱爱电影网址| 蜜桃免费网站一区二区三区| 亚洲婷婷综合色高清在线| 91精品国产手机| 色综合久久综合中文综合网| 韩国v欧美v日本v亚洲v| 一区二区三区国产| 国产精品午夜春色av| 欧美高清激情brazzers| caoporm超碰国产精品| 蜜桃久久av一区| 亚洲自拍偷拍综合| 日本一区二区三区久久久久久久久不 | 亚洲成人综合在线| 亚洲欧美在线另类| 久久综合九色综合97_久久久| 欧美婷婷六月丁香综合色| 东方aⅴ免费观看久久av| 蜜桃在线一区二区三区| 亚洲一区二区三区影院| 18欧美亚洲精品| 久久精品一区二区三区四区| 欧美一区二区三区成人| 欧美性感一类影片在线播放| 国产成人免费视频精品含羞草妖精| 日韩精品一二区| 亚洲小说春色综合另类电影| 自拍av一区二区三区| 国产午夜精品久久久久久久 | 久久男人中文字幕资源站| 欧美精选午夜久久久乱码6080| 91在线视频播放地址| 国产成a人亚洲精品| 国产在线麻豆精品观看| 麻豆精品一区二区av白丝在线| 亚洲国产精品久久人人爱| 亚洲日本va午夜在线电影| 亚洲国产成人一区二区三区| 久久亚洲综合av| 久久综合中文字幕| 欧美成人一级视频| 欧美xingq一区二区| 日韩一区二区三区在线| 欧美一区二区三区公司| 欧美一卡二卡在线观看| 91精品国产黑色紧身裤美女| 欧美精品在线观看播放| 欧美精品xxxxbbbb| 欧美日韩精品三区| 欧美日韩视频不卡| 欧美三级韩国三级日本一级| 欧美在线观看视频一区二区三区| 色综合色综合色综合色综合色综合| 波多野结衣的一区二区三区| www.亚洲精品| 波多野洁衣一区| 91亚洲国产成人精品一区二三| 波多野结衣的一区二区三区| 91一区二区三区在线播放| 色av成人天堂桃色av| 在线日韩一区二区| 欧美日韩视频在线第一区| 538在线一区二区精品国产| 欧美一级夜夜爽| 欧美xxxx在线观看| 久久亚洲精华国产精华液| 久久久国产午夜精品| 国产精品乱码人人做人人爱 | 欧美videos中文字幕| 亚洲精品一区二区在线观看| 久久久久国产精品麻豆| 国产日韩欧美一区二区三区综合 | 在线成人午夜影院| 欧美一级在线免费| 国产午夜精品一区二区三区视频| 国产精品久线在线观看| 一级女性全黄久久生活片免费| 亚洲主播在线观看| 偷拍亚洲欧洲综合| 老鸭窝一区二区久久精品| 国产精品1区2区3区| 99久久99久久精品免费观看| 精品污污网站免费看| 欧美一级黄色录像| 久久久久久日产精品| 国产精品久久久久久久久免费桃花| 亚洲天堂免费看| 无码av中文一区二区三区桃花岛| 免费在线视频一区| 东方aⅴ免费观看久久av| 欧美中文字幕久久| 日韩精品自拍偷拍| 国产精品国产三级国产| 亚洲一区二区三区影院| 久久99国产精品免费| 成人黄色在线网站| 欧美肥妇毛茸茸| 国产性色一区二区| 亚洲一区在线观看免费观看电影高清 | 欧美国产成人精品| 亚洲国产精品嫩草影院| 韩国精品主播一区二区在线观看 |