the game where you go into mines and start crafting! but for consoles (forked directly from smartcmd's github)
at main 90 lines 3.4 kB view raw
1#include "stdafx.h" 2#include "FrustumData.h" 3 4float** m_Frustum; 5 6 7FrustumData::FrustumData() 8{ 9 m_Frustum = new float *[16]; 10 for( int i = 0; i < 16; i++ ) m_Frustum[i] = new float[16]; 11 proj = floatArray( 16 ); 12 modl = floatArray( 16 ); 13 clip = floatArray( 16 ); 14} 15 16FrustumData::~FrustumData() 17{ 18 delete[] proj.data; 19 delete[] modl.data; 20 delete[] clip.data; 21 for( int i = 0; i < 16; i++ ) delete[] m_Frustum[i]; 22 delete[] m_Frustum; 23} 24 25bool FrustumData::pointInFrustum(float x, float y, float z) 26{ 27 for (int i = 0; i < 6; i++) 28 { 29 if (m_Frustum[i][A] * x + m_Frustum[i][B] * y + m_Frustum[i][C] * z + m_Frustum[i][D] <= 0) 30 { 31 return false; 32 } 33 } 34 35 return true; 36} 37 38bool FrustumData::sphereInFrustum(float x, float y, float z, float radius) 39{ 40 for (int i = 0; i < 6; i++) 41 { 42 if (m_Frustum[i][A] * x + m_Frustum[i][B] * y + m_Frustum[i][C] * z + m_Frustum[i][D] <= -radius) 43 { 44 return false; 45 } 46 } 47 48 return true; 49} 50 51bool FrustumData::cubeFullyInFrustum(double x1, double y1, double z1, double x2, double y2, double z2) 52{ 53 for (int i = 0; i < 6; i++) 54 { 55 if (!(m_Frustum[i][A] * (x1) + m_Frustum[i][B] * (y1) + m_Frustum[i][C] * (z1) + m_Frustum[i][D] > 0)) return false; 56 if (!(m_Frustum[i][A] * (x2) + m_Frustum[i][B] * (y1) + m_Frustum[i][C] * (z1) + m_Frustum[i][D] > 0)) return false; 57 if (!(m_Frustum[i][A] * (x1) + m_Frustum[i][B] * (y2) + m_Frustum[i][C] * (z1) + m_Frustum[i][D] > 0)) return false; 58 if (!(m_Frustum[i][A] * (x2) + m_Frustum[i][B] * (y2) + m_Frustum[i][C] * (z1) + m_Frustum[i][D] > 0)) return false; 59 if (!(m_Frustum[i][A] * (x1) + m_Frustum[i][B] * (y1) + m_Frustum[i][C] * (z2) + m_Frustum[i][D] > 0)) return false; 60 if (!(m_Frustum[i][A] * (x2) + m_Frustum[i][B] * (y1) + m_Frustum[i][C] * (z2) + m_Frustum[i][D] > 0)) return false; 61 if (!(m_Frustum[i][A] * (x1) + m_Frustum[i][B] * (y2) + m_Frustum[i][C] * (z2) + m_Frustum[i][D] > 0)) return false; 62 if (!(m_Frustum[i][A] * (x2) + m_Frustum[i][B] * (y2) + m_Frustum[i][C] * (z2) + m_Frustum[i][D] > 0)) return false; 63 } 64 65 return true; 66} 67 68bool FrustumData::cubeInFrustum(double x1, double y1, double z1, double x2, double y2, double z2) 69{ 70 for (int i = 0; i < 6; i++) 71 { 72 if (m_Frustum[i][A] * (x1) + m_Frustum[i][B] * (y1) + m_Frustum[i][C] * (z1) + m_Frustum[i][D] > 0) continue; 73 if (m_Frustum[i][A] * (x2) + m_Frustum[i][B] * (y1) + m_Frustum[i][C] * (z1) + m_Frustum[i][D] > 0) continue; 74 if (m_Frustum[i][A] * (x1) + m_Frustum[i][B] * (y2) + m_Frustum[i][C] * (z1) + m_Frustum[i][D] > 0) continue; 75 if (m_Frustum[i][A] * (x2) + m_Frustum[i][B] * (y2) + m_Frustum[i][C] * (z1) + m_Frustum[i][D] > 0) continue; 76 if (m_Frustum[i][A] * (x1) + m_Frustum[i][B] * (y1) + m_Frustum[i][C] * (z2) + m_Frustum[i][D] > 0) continue; 77 if (m_Frustum[i][A] * (x2) + m_Frustum[i][B] * (y1) + m_Frustum[i][C] * (z2) + m_Frustum[i][D] > 0) continue; 78 if (m_Frustum[i][A] * (x1) + m_Frustum[i][B] * (y2) + m_Frustum[i][C] * (z2) + m_Frustum[i][D] > 0) continue; 79 if (m_Frustum[i][A] * (x2) + m_Frustum[i][B] * (y2) + m_Frustum[i][C] * (z2) + m_Frustum[i][D] > 0) continue; 80 81 return false; 82 } 83 84 return true; 85} 86 87bool FrustumData::isVisible(AABB *aabb) 88{ 89 return cubeInFrustum(aabb->x0, aabb->y0, aabb->z0, aabb->x1, aabb->y1, aabb->z1); 90}