00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #if !defined(AFX_GLCAMERAFRUSTUM_H__4C341296_0589_46D5_BFD7_3114534F7E2D__INCLUDED_)
00022 #define AFX_GLCAMERAFRUSTUM_H__4C341296_0589_46D5_BFD7_3114534F7E2D__INCLUDED_
00023
00024 #include <engine/GameStateI.h>
00025 #include <common/Vector.h>
00026
00027 class GLCameraFrustum : public GameStateI
00028 {
00029 public:
00030 static GLCameraFrustum *instance();
00031
00032 static Vector FrustrumRed;
00033 static Vector FrustrumBlue;
00034 static Vector FrustrumGreen;
00035 static Vector FrustrumWhite;
00036
00037 virtual void draw(const unsigned state);
00038
00039 bool sphereInFrustum(Vector &point, float fRadius = 1, Vector &color = FrustrumWhite);
00040 bool sphereInFrustumThreadSafe(Vector &point, float fRadius);
00041 void backupFrustum();
00042 void restoreFrustum();
00043 void drawBilboard(
00044 Vector &position, Vector &color, float alpha,
00045 float width, float height, bool additive, int texCoord);
00046
00047 Vector &getBilboardVectorX();
00048 Vector &getBilboardVectorY();
00049
00050 float *getViewMatrix() { return s.fView; }
00051
00052 protected:
00053 static GLCameraFrustum *instance_;
00054 struct Settings
00055 {
00056 float frustum_[6][4];
00057 float fProj[16];
00058 float fView[16];
00059 float fClip[16];
00060 float viewport[4];
00061 float aspect;
00062 } s, b;
00063
00064 void normalize(float vector[4]);
00065
00066 private:
00067 GLCameraFrustum();
00068 virtual ~GLCameraFrustum();
00069
00070 };
00071
00072 #endif // !defined(AFX_GLCAMERAFRUSTUM_H__4C341296_0589_46D5_BFD7_3114534F7E2D__INCLUDED_)