📄 pknorm.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 + -