⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pknorm.h

📁 奇迹世界公用文件源代码,研究网络游戏的朋友可以研究下
💻 H
字号:
#ifndef N_PKNORM_H
#define N_PKNORM_H
//------------------------------------------------------------------------------
/**
    a normal packed into 16 bits.
    @author
    - RadonLabs GmbH 
    @since
    - 2005.7.06
    @remarks
    - 瘤肯 眠啊 
*/

#include "vector.h"

//-------------------------------------------------------------------
class pknorm3 {
    ushort n;

public:
    //--- pack each component into 5 bits ---------------------------
    void pack(vector3& v) {
        const float r = 31.999f;
        unsigned int ix = (unsigned int) (r * (v.x+1.0f)*0.5f);
        unsigned int iy = (unsigned int)(r * (v.y+1.0f)*0.5f);
        unsigned int iz = (unsigned int) (r * (v.z+1.0f)*0.5f);
        n = ((ix&31)<<10) | ((iy&31)<<5) | (iz&31);
    };

    //--- unpack into vector3 ---------------------------------------
    vector3 unpack(void) {
        const float r = 31.999f;
        float ix = float((n>>10) & 31);
        float iy = float((n>>5) & 31);
        float iz = float(n & 31);
        vector3 v((((ix/r)*2.0f)-1.0f),
                  (((iy/r)*2.0f)-1.0f),
                  (((iz/r)*2.0f)-1.0f));
        return v;
    };

    //-- constructors -----------------------------------------------
    pknorm3() : n(0) {};
    pknorm3(vector3& v) {
        pack(v);
    };

    //-- get/set packed representation ------------------------------
    ushort getpacked(void) {
        return n;
    };
    void setpacked(ushort _n) {
        n = _n;
    };
};
//-------------------------------------------------------------------
#endif        

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -