![]() |
VR-Forces 4.0.4 Class Documentation
|
00001 /****************************************************************************** 00002 ** Copyright (c) 2010 MAK Technologies, Inc. 00003 ** All rights reserved. 00004 ******************************************************************************/ 00005 00007 #pragma once 00008 #include <vrvGraphics/vrvGraphics.h> 00009 00010 namespace makVrv 00011 { 00014 class DT_DLL_VRVGRAPHICS DtCoordinatePack 00015 { 00016 public: 00017 00019 static inline void pack(const double pos[3], float pospack[4]) 00020 { 00021 double tmp[3]; 00022 tmp[0] = floor(pos[0]); 00023 tmp[1] = floor(pos[1]); 00024 tmp[2] = floor(pos[2]); 00025 00026 double frac = floor((pos[0] - tmp[0]) * 256.0) + 00027 (floor((pos[1] - tmp[1]) * 256.0) * 256.0) + 00028 (floor((pos[2] - tmp[2]) * 256.0)) * 65536.0; 00029 00030 pospack[0] = tmp[0]; 00031 pospack[1] = tmp[1]; 00032 pospack[2] = tmp[2]; 00033 pospack[3] = frac; 00034 } 00035 00037 static inline void unpack( const float pospack[4], double pos[3] ) 00038 { 00039 double frac = pospack[3]; 00040 pos[2] = floor(frac / 65536.0); 00041 frac -= pos[2] * 65536.0; 00042 pos[2] /= 256.0; 00043 pos[2] += pospack[2]; 00044 00045 pos[1] = floor(frac / 256.0); 00046 frac -= pos[1] * 256.0; 00047 pos[1] /= 256.0; 00048 pos[1] += pospack[1]; 00049 00050 pos[0] = frac / 256.0; 00051 pos[0] += pospack[0]; 00052 } 00053 }; 00054 }