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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? _vector4.h

?? 奇跡世界公用文件源代碼,研究網絡游戲的朋友可以研究下
?? H
字號:
#ifndef _VECTOR4_H
#define _VECTOR4_H
//------------------------------------------------------------------------------
/**
    A generic vector4 class.

    @author
    - RadonLabs GmbH 

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

#include "nmath.h"
#include <float.h>

//------------------------------------------------------------------------------
class _vector4 
{
public:
    enum component
    {
        X = (1<<0),
        Y = (1<<1),
        Z = (1<<2),
        W = (1<<3),
    };

    /// constructor 1
    _vector4();
    /// constructor 2
    _vector4(const float _x, const float _y, const float _z, const float _w);
    /// constructor 3
    _vector4(const _vector4& vec);
    /// constructor from vector3 (w will be set to 1.0)
    _vector4(const _vector3& vec3);
    /// set elements 1
    void set(const float _x, const float _y, const float _z, const float _w);
    /// set elements 2 
    void set(const _vector4& v);
    /// set to vector3 (w will be set to 1.0)
    void set(const _vector3& v);
    /// return length
    float len() const;
    /// normalize
    void norm();
    /// inplace add
    void operator +=(const _vector4& v);
    /// inplace sub
    void operator -=(const _vector4& v);
    /// inplace scalar mul
    void operator *=(const float s);
    /// vector3 assignment operator (w set to 1.0f)
    _vector4& operator=(const _vector3& v);
    /// fuzzy compare
    bool isequal(const _vector4& v, float tol) const;
    /// fuzzy compare, return -1, 0, +1
    int compare(const _vector4& v, float tol) const;
    /// set own components to minimum
    void minimum(const _vector4& v);
    /// set own components to maximum
    void maximum(const _vector4& v);
    /// set component float value by mask
    void setcomp(float val, int mask);
    /// get component float value by mask
    float getcomp(int mask);
    /// get write mask for smallest component
    int mincompmask() const;
    /// inplace linear interpolation
    void lerp(const _vector4& v0, float lerpVal);
    /// linear interpolation between v0 and v1
    void lerp(const _vector4& v0, const _vector4& v1, float lerpVal);
    /// saturate components between 0 and 1
    void saturate();
    /// dot product
    float dot(_vector4 v0) const;

    float x, y, z, w;
};

//------------------------------------------------------------------------------
/**
*/
inline
_vector4::_vector4() :
    x(0.0f),
    y(0.0f),
    z(0.0f),
    w(0.0f)
{
    // empty
}

//------------------------------------------------------------------------------
/**
*/
inline
_vector4::_vector4(const float _x, const float _y, const float _z, const float _w) :
    x(_x),
    y(_y),
    z(_z),
    w(_w)
{
    // empty
}

//------------------------------------------------------------------------------
/**
*/
inline
_vector4::_vector4(const _vector4& v) :
    x(v.x),
    y(v.y),
    z(v.z),
    w(v.w)
{
    // empty
}

//------------------------------------------------------------------------------
/**
*/
inline
_vector4::_vector4(const _vector3& v) :
    x(v.x),
    y(v.y),
    z(v.z),
    w(1.0f)
{
    // empty
}

//------------------------------------------------------------------------------
/**
*/
inline
void
_vector4::set(const float _x, const float _y, const float _z, const float _w)
{
    x = _x;
    y = _y;
    z = _z;
    w = _w;
}

//------------------------------------------------------------------------------
/**
*/
inline
void
_vector4::set(const _vector4& v)
{
    x = v.x;
    y = v.y;
    z = v.z;
    w = v.w;
}

//------------------------------------------------------------------------------
/**
*/
inline
void
_vector4::set(const _vector3& v)
{
    x = v.x;
    y = v.y;
    z = v.z;
    w = 1.0f;
}

//------------------------------------------------------------------------------
/**
*/
inline
float
_vector4::len() const
{
    return (float) sqrt(x * x + y * y + z * z + w * w);
}

//------------------------------------------------------------------------------
/**
*/
inline
void
_vector4::norm()
{
    float l = len();
    if (l > TINY) 
    {
        float oneDivL = 1.0f / l;
        x *= oneDivL;
        y *= oneDivL;
        z *= oneDivL;
        w *= oneDivL;
    }
}

//------------------------------------------------------------------------------
/**
*/
inline
void
_vector4::operator +=(const _vector4& v)
{
    x += v.x; 
    y += v.y; 
    z += v.z; 
    w += v.w;
}

//------------------------------------------------------------------------------
/**
*/
inline
void
_vector4::operator -=(const _vector4& v)
{
    x -= v.x; 
    y -= v.y; 
    z -= v.z; 
    w -= v.w;
}

//------------------------------------------------------------------------------
/**
*/
inline
void
_vector4::operator *=(const float s)
{
    x *= s; 
    y *= s; 
    z *= s; 
    w *= s;
}

//------------------------------------------------------------------------------
/**
*/
inline
_vector4&
_vector4::operator=(const _vector3& v)
{
    this->set(v);
    return *this;
}

//------------------------------------------------------------------------------
/**
*/
inline
bool
_vector4::isequal(const _vector4& v, float tol) const
{
    if (fabs(v.x - x) > tol)      return false;
    else if (fabs(v.y - y) > tol) return false;
    else if (fabs(v.z - z) > tol) return false;
    else if (fabs(v.w - w) > tol) return false;
    return true;
}

//------------------------------------------------------------------------------
/**
*/
inline
int
_vector4::compare(const _vector4& v, float tol) const
{
    if (fabs(v.x - x) > tol)      return (v.x > x) ? +1 : -1; 
    else if (fabs(v.y - y) > tol) return (v.y > y) ? +1 : -1;
    else if (fabs(v.z - z) > tol) return (v.z > z) ? +1 : -1;
    else if (fabs(v.w - w) > tol) return (v.w > w) ? +1 : -1;
    else                          return 0;
}

//------------------------------------------------------------------------------
/**
*/
inline
void
_vector4::minimum(const _vector4& v)
{
    if (v.x < x) x = v.x;
    if (v.y < y) y = v.y;
    if (v.z < z) z = v.z;
    if (v.w < w) w = v.w;
}

//------------------------------------------------------------------------------
/**
*/
inline
void
_vector4::maximum(const _vector4& v)
{
    if (v.x > x) x = v.x;
    if (v.y > y) y = v.y;
    if (v.z > z) z = v.z;
    if (v.w > w) w = v.w;
}

//------------------------------------------------------------------------------
/**
*/
static 
inline 
_vector4 operator +(const _vector4& v0, const _vector4& v1) 
{
    return _vector4(v0.x + v1.x, v0.y + v1.y, v0.z + v1.z, v0.w + v1.w);
}

//------------------------------------------------------------------------------
/**
*/
static 
inline 
_vector4 operator -(const _vector4& v0, const _vector4& v1) 
{
    return _vector4(v0.x - v1.x, v0.y - v1.y, v0.z - v1.z, v0.w - v1.w);
}

//------------------------------------------------------------------------------
/**
*/
static 
inline 
_vector4 operator *(const _vector4& v0, const float& s) 
{
    return _vector4(v0.x * s, v0.y * s, v0.z * s, v0.w * s);
}

//------------------------------------------------------------------------------
/**
*/
static 
inline 
_vector4 operator -(const _vector4& v)
{
    return _vector4(-v.x, -v.y, -v.z, -v.w);
}

//------------------------------------------------------------------------------
/**
*/
inline
void
_vector4::setcomp(float val, int mask)
{
    if (mask & X) x = val;
    if (mask & Y) y = val;
    if (mask & Z) z = val;
    if (mask & W) w = val;
}

//------------------------------------------------------------------------------
/**
*/
inline
float
_vector4::getcomp(int mask)
{
    switch (mask)
    {
        case X:  return x;
        case Y:  return y;
        case Z:  return z;
        default: return w;
    }
}

//------------------------------------------------------------------------------
/**
*/
inline
int
_vector4::mincompmask() const
{
    float minVal = x;
    int minComp = X;
    if (y < minVal)
    {
        minComp = Y;
        minVal  = y;
    }
    if (z < minVal) 
    {
        minComp = Z;
        minVal  = z;
    }
    if (w < minVal) 
    {
        minComp = W;
        minVal  = w;
    }
    return minComp;
}

//------------------------------------------------------------------------------
/**
*/
inline
void
_vector4::lerp(const _vector4& v0, float lerpVal)
{
    x = v0.x + ((x - v0.x) * lerpVal);
    y = v0.y + ((y - v0.y) * lerpVal);
    z = v0.z + ((z - v0.z) * lerpVal);
    w = v0.w + ((w - v0.w) * lerpVal);
}

//------------------------------------------------------------------------------
/**
*/
inline
void
_vector4::lerp(const _vector4& v0, const _vector4& v1, float lerpVal)
{
    x = v0.x + ((v1.x - v0.x) * lerpVal);
    y = v0.y + ((v1.y - v0.y) * lerpVal);
    z = v0.z + ((v1.z - v0.z) * lerpVal);
    w = v0.w + ((v1.w - v0.w) * lerpVal);
}


//------------------------------------------------------------------------------
/**
*/
inline
void
_vector4::saturate()
{
    x = n_saturate(x);
    y = n_saturate(y);
    z = n_saturate(z);
    w = n_saturate(w);
}

//------------------------------------------------------------------------------
/**
    Dot product for vector4
*/
inline
float _vector4::dot(_vector4 v0) const
{
    return ( x * v0.x + y * v0.y + z * v0.z + w * v0.w );
}

//------------------------------------------------------------------------------
#endif

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产一区不卡精品| 久久综合av免费| 国产精品欧美一级免费| 久久国产免费看| 欧美精品一级二级| 亚洲高清中文字幕| 欧美午夜在线一二页| 午夜视频一区在线观看| 欧美日韩一区二区三区在线看| 亚洲免费视频成人| 欧美色倩网站大全免费| 亚洲一区二区免费视频| 欧美在线免费播放| 日韩精品欧美成人高清一区二区| 91欧美激情一区二区三区成人| 国产精品乱人伦| 色域天天综合网| 午夜欧美2019年伦理 | 亚洲韩国一区二区三区| 欧美影片第一页| 免费成人深夜小野草| 欧美成人福利视频| 99久久国产免费看| 亚洲成人av一区| 精品国精品国产尤物美女| 成人小视频免费在线观看| 国产精品萝li| 日韩一卡二卡三卡四卡| va亚洲va日韩不卡在线观看| 国产精品美女久久久久aⅴ| 欧美视频在线一区二区三区 | 麻豆视频一区二区| 成人欧美一区二区三区黑人麻豆| 91国产成人在线| 精品制服美女丁香| 亚洲va欧美va国产va天堂影院| 日韩一区二区三区视频| 99视频在线观看一区三区| 免费成人你懂的| 亚洲午夜久久久久久久久久久| 精品国产99国产精品| 欧美在线观看18| 99re8在线精品视频免费播放| 日本不卡视频一二三区| 尤物在线观看一区| 亚洲欧洲另类国产综合| 久久久久久电影| 久久精品亚洲乱码伦伦中文| 51精品秘密在线观看| 精品视频999| 欧美日韩国产一二三| 91浏览器在线视频| 91福利精品视频| 日本一区二区电影| 天堂久久一区二区三区| 欧美日韩在线免费视频| 91亚洲精华国产精华精华液| 国产91色综合久久免费分享| 国产精品亚洲一区二区三区妖精 | 美女诱惑一区二区| 日本在线不卡视频| 亚洲成人tv网| 另类中文字幕网| 国产超碰在线一区| 国产suv一区二区三区88区| 黑人巨大精品欧美黑白配亚洲| 国产乱理伦片在线观看夜一区| 精品一区二区三区免费播放| 国产99久久精品| 日本高清不卡视频| 日韩丝袜美女视频| 国产精品久久久久久久久免费桃花| 亚洲乱码一区二区三区在线观看| 亚洲伊人色欲综合网| 美女精品自拍一二三四| 91亚洲资源网| 国产亚洲综合色| 亚洲成国产人片在线观看| 狠狠色狠狠色综合| 欧美三级视频在线观看| 中文字幕第一页久久| 亚洲国产一区二区视频| 成人在线视频一区| 欧美大胆人体bbbb| 亚洲伊人色欲综合网| 国产成人精品影视| 日韩精品一区二区三区蜜臀| 亚洲国产精品t66y| 国产自产视频一区二区三区| 欧美综合视频在线观看| 国产精品美女久久久久高潮| 美国一区二区三区在线播放| 欧美日韩精品免费观看视频| 国产精品乱码一区二区三区软件 | 日本午夜精品视频在线观看| 91在线播放网址| 亚洲欧美成aⅴ人在线观看| 国产精品一区在线观看你懂的| 欧美久久久一区| 午夜精品福利一区二区蜜股av| 91丨porny丨国产入口| 国产精品视频观看| 不卡的av在线| 亚洲欧洲av一区二区三区久久| 国产精品综合在线视频| wwwwxxxxx欧美| 国产成人免费视频| 国产精品精品国产色婷婷| 成人性生交大合| 亚洲一区在线电影| 欧美高清视频www夜色资源网| 亚洲最快最全在线视频| 欧美日韩精品一区二区三区四区 | 欧美人牲a欧美精品| 日韩成人一级大片| 久久久国产精华| 91小视频在线| 免费成人美女在线观看.| 精品嫩草影院久久| 成人av网站免费| 日韩综合小视频| 亚洲国产精品精华液2区45| 99riav久久精品riav| 日韩av午夜在线观看| 久久亚洲综合色| 91污片在线观看| 久久66热re国产| 一区二区三区四区蜜桃| 日韩丝袜美女视频| 欧美影片第一页| 91在线国内视频| 韩国av一区二区三区四区| 一区二区在线观看视频在线观看| 日韩欧美二区三区| 欧美在线免费观看亚洲| 99精品久久只有精品| 韩国一区二区视频| 日本va欧美va欧美va精品| 亚洲素人一区二区| 国产丝袜在线精品| 日韩免费看网站| 欧美一区二区三区在线| 色综合久久综合中文综合网| 久久精品国产99久久6| 日韩精品电影在线| 亚洲国产精品嫩草影院| 亚洲欧美激情在线| 中文字幕欧美日韩一区| 欧美极品另类videosde| 久久综合九色欧美综合狠狠| 日韩精品中文字幕在线不卡尤物| 欧美性受xxxx| 欧美一区二区三区婷婷月色| 欧美一区二区啪啪| 日韩限制级电影在线观看| 91精品国产高清一区二区三区蜜臀| 日本道在线观看一区二区| 在线一区二区三区做爰视频网站| 色综合中文综合网| 午夜精品视频一区| 日韩av不卡在线观看| 久久精品噜噜噜成人88aⅴ| 国产九色sp调教91| 99re这里只有精品首页| 在线观看免费亚洲| 日韩精品一区二区三区四区视频| 久久九九久久九九| 国产精品理论片| 亚洲国产人成综合网站| 久久国产精品99精品国产| 成人av综合在线| 91精品国产黑色紧身裤美女| 久久综合九色综合欧美98 | 亚洲国产激情av| 亚洲免费视频中文字幕| 久久机这里只有精品| 99视频热这里只有精品免费| 欧美一区二区三区男人的天堂| 国产三级三级三级精品8ⅰ区| 亚洲国产乱码最新视频| 国产精品一区二区三区四区| 欧美精品一二三区| 有码一区二区三区| 成人激情视频网站| 日韩一区二区三区在线观看| 亚洲美女淫视频| 国产成人亚洲精品青草天美| 欧美酷刑日本凌虐凌虐| 亚洲免费视频成人| 91丝袜呻吟高潮美腿白嫩在线观看| 精品粉嫩aⅴ一区二区三区四区| 亚洲综合成人在线视频| 99久久婷婷国产综合精品| 久久人人97超碰com| 六月丁香婷婷色狠狠久久| 麻豆免费看一区二区三区| 美女一区二区三区在线观看| 久草这里只有精品视频| 9久草视频在线视频精品| 久久噜噜亚洲综合|