#ifndef __IntersectDSG_H__ #define __IntersectDSG_H__ //======================================================================== // Copyright (C) 2002 Radical Entertainment Ltd. All rights reserved. // // Component: IntersectDSG // // Description: The IntersectDSG does STUFF // // History: + Initial Implementation -- Devin [2002/05/06] // //======================================================================== //================================================= // System Includes //================================================= #include #include #include //================================================= // Project Includes //================================================= #include #include //======================================================================== // // Synopsis: The IntersectDSG; Synopsis by Inspection. // //======================================================================== class IntersectDSG : public IEntityDSG { public: IntersectDSG(); IntersectDSG( tGeometry* ipGeometry ); ~IntersectDSG(); void Display(); //#ifndef RAD_RELEASE inline void DrawTri(rmt::Vector* ipTriPts, tColour iColour); //#endif int mFlatTriFast( int& orTriNum, rmt::Vector* iopTriPts, rmt::Vector& orTriNorm ); int mTri( int inTri, rmt::Vector* opTriPts, rmt::Vector& orTriNorm ); int nTris(); virtual void GetBoundingBox(rmt::Box3D* box); virtual void GetBoundingSphere(rmt::Sphere* sphere); virtual void SetBoundingBox( float x1, float y1, float z1, float x2, float y2, float z2); virtual void SetBoundingSphere(float x, float y, float z, float radius); virtual rmt::Vector* pPosition(); virtual const rmt::Vector& rPosition(); virtual void GetPosition( rmt::Vector* ipPosn ); virtual int GetNumPrimGroup(); ////////////////////////////////////////////////////////////////////////// // DONT TOUCH, unles you know what you're doing ////////////////////////////////////////////////////////////////////////// ReserveArray mTriIndices; ReserveArray mTriPts; //Separated Triangles ReserveArray mTriNorms; //Triangle Normals ReserveArray mTerrainType; // The terrain type for the triangle. ////////////////////////////////////////////////////////////////////////// // Pre and Post calls for ScratchPad ////////////////////////////////////////////////////////////////////////// void IntoTheVoid_WithGoFastaStripes(); void OutOfTheVoid_WithGoFastaStripes(); ////////////////////////////////////////////////////////////////////////// // Used to cache real data ptrs while data is uploaded to ScratchPad ////////////////////////////////////////////////////////////////////////// static int* mspIndexData; static unsigned char* mspTerrainData; static rmt::Vector* mspVertexData; static rmt::Vector* mspNormalData; static bool msbInScratchPad; // ReserveArray mTriCentroids; //Triangle Centroids // ReserveArray mTriRadius; //Triangle Radius; the approximate // length of the furthest pt from the centroid int mnPrimGroups; rmt::Box3D mBox3D; rmt::Sphere mSphere; rmt::Vector mPosn; enum { UNINIT_PT= 0x0, X_GT_PT = 0x0001, X_LT_PT = 0x0002, Z_GT_PT = 0x0004, Z_LT_PT = 0x0008, INIT_PT = 0x0010, FOUND_PT = 0X001F }; protected: void GenIDSG( tGeometry* ipGeometry ); void PreParseTris( tPrimGroupStreamed* ipPrimGroup ); void PreParseTriStrips( tPrimGroupStreamed* ipPrimGroup ); void DoAllAllocs(); void ParseTris( tPrimGroupStreamed* ipPrimGroup ); void ParseTriStrips( tPrimGroupStreamed* ipPrimGroup ); void CalcAllFields(); private: }; #endif