// The following ifdef block is the standard way of creating macros which make exporting // from a DLL simpler. All files within this DLL are compiled with the HEADTRACKER_EXPORTS // symbol defined on the command line. this symbol should not be defined on any project // that uses this DLL. This way any other project whose source files include this file see // HEADTRACKER_API functions as being imported from a DLL, whereas this DLL sees symbols // defined with this macro as being exported. #ifndef ___HEADTRACKER_H___ #define ___HEADTRACKER_H___ #include "CCMesh.h" #include "CCMap.h" //#define HEADTRACKER_DLL_MODE #ifdef HEADTRACKER_DLL_MODE #ifdef HEADTRACKER_EXPORTS #define HEADTRACKER_API __declspec(dllexport) #else #define HEADTRACKER_API __declspec(dllimport) #endif #else #define HEADTRACKER_API #endif #define MAX_POINTS 4096 #define MAX_NUM_OF_FERNS 200 #define MAX_ferns MAX_NUM_OF_FERNS typedef struct { float X,Y; float fZFromZbuffer; u32 AreaMask[8]; u32 BigE; u32 NextIndex; u32 PreviousIndex; u32 TrackingTime; float TrackedDistance; float SpeedX,SpeedY; u32 GroupIndex; } TRACKEDPOINT ; typedef struct STATE_FLAGS_V0_ { u32 Booted :1; u32 Ready2Learn :1; u32 DrawMesh :1; u32 DrawText :1; u32 FromScratch :1; u32 FlyStart :1; u32 ViolaStart :1; u32 ContinuousLearn:1; } STATE_FLAGS_V0; typedef struct STATE_FLAGS_ { u32 Booted :1; u32 Ready2Learn :1; u32 DrawMesh :1; u32 DrawText :1; u32 FromScratch :1; u32 FlyStart :1; u32 ViolaStart :1; u32 ContinuousLearn:1; u32 IsAnimatedTrack:1; u32 CamPlaced:1; u32 ComputeMask:1; } STATE_FLAGS; typedef struct IDFX_ { STATE_FLAGS SF_U; MATRIX CurrentMatrix_U; MATRIX CurrentMatrix_UNS; STATE_FLAGS SF_T; MATRIX CurrentMatrix_T; /* Real ID DATAS */ u32 NumberOfPoints; Vector _3D_Init_Coordinate[MAX_NUM_OF_FERNS]; Vector _3D_Estimated_Coordinate[MAX_NUM_OF_FERNS]; Vector _3D_CreationDirection[MAX_NUM_OF_FERNS]; struct LearnBase_ *LB; Mesh *p_UsedMesh; u32 StatusMeshColor; char ID_Name[256]; Vector vModelScale; u32 AnimatedMedia; // used only if SF.IsAnimatedTrack u32 AnimatedMedia_SubIndex; // used only if SF.IsAnimatedTrack /* Automatic detection parrameters */ Vector HaarParameter; /* Real Time ID track info */ MATRIX PrevMatrixOK; // u32 FromScratch; // u32 FlyStart; u32 Previous_TPS_2_Match[MAX_POINTS]; Vector LastMax; Vector LastMin; /* Statistics */ u32 CreationTime[MAX_NUM_OF_FERNS]; u32 GoodMatches[MAX_NUM_OF_FERNS]; u32 PositivesMatches[MAX_NUM_OF_FERNS]; /* Interframes */ u32 NumberOfInterframes; u32 IF_TPS_Index[MAX_POINTS]; Vector IF_Estimated_Coordinate[MAX_POINTS]; Vector IF_Init_Coordinate[MAX_POINTS]; Vector IF_CreationDirection[MAX_POINTS]; /* Bench */ u32 Time_Posit; u32 Time_Total; u32 Time_Collide; Vector *PointsMeshOriginal; } IDFX; typedef struct WRKSPC_2D_ { u32 nTps; TRACKEDPOINT TPS[MAX_POINTS]; MAP *SRC_BW; } WRKSPC_2D; #define NumberOfWorkingBuffers (8+1) typedef struct WORKINGSPACE_ { WRKSPC_2D *Current_WSP; WRKSPC_2D *Previous_WSP; MAP *DRAWMAP; MAP *RENDERMAP; MAP *ZBUFFERMAP; MAP *WORK[NumberOfWorkingBuffers]; /* Hand Tracking */ MAP *PREVIOUSMAP; u32 bDrawHands; u32 bFirstFrame; u32 nbFrames; s32 *HANDWORK[20]; /* Working Buffer */ u32 CurrentFrameNumber; u32 NumberOfPosit; u32 Posit_2_TPS[MAX_POINTS*2]; u32 TPS_2_Match[MAX_POINTS]; /* Working Buffer for minimization */ Vector ScreenDirs[MAX_POINTS]; u32 MatchNumber[MAX_POINTS]; Vector Posit_Image[MAX_POINTS*2]; Vector Posit_DataB[MAX_POINTS*2]; Vector Posit_DataB_i[MAX_POINTS*2]; Vector Posit_CameraAxis[MAX_POINTS*2]; Vector LastMax; Vector LastMin; /* Rasters */ u32 DrawDebug; u32 DrawDebug2; float INTERP_MatchingPercent; } WORKINGSPACE; u32 HEADTRACKER_API ID_ADD_ENTRY(WORKINGSPACE *WSPC,IDFX *ID,Vector *CamPos,Vector *Coordinate,u32 *BWin,u32 Pitch); void HEADTRACKER_API ID_LEARN(IDFX *ID,WORKINGSPACE *WSPC); u32 HEADTRACKER_API ID_TRACK(IDFX *ID,WORKINGSPACE *WSPC); void HEADTRACKER_API MATCH_2_FRAMES_WSPC(WORKINGSPACE *WSPC); void HEADTRACKER_API FIND_INTEREST_WSCP(WORKINGSPACE *WSPC); WORKINGSPACE HEADTRACKER_API * WSPC_CreateWspc(MAP *RefMap,MAP *DrawMap,MAP *ZMAP); void HEADTRACKER_API WSPC_Destroy(WORKINGSPACE *WSP); void HEADTRACKER_API WSPC_2D_BEGIN(WORKINGSPACE *WSPC); void HEADTRACKER_API WSPC_2D_END(WORKINGSPACE *WSPC); IDFX HEADTRACKER_API *ID_NEW(); void HEADTRACKER_API ID_DELETE(IDFX *ID); void HEADTRACKER_API ID_RESET(IDFX *ID); u32 HEADTRACKER_API ID_LOAD(FILE *F,IDFX *ID); void HEADTRACKER_API ID_SAVE(FILE *F,IDFX *ID); DECLARE_IO_H(IDFX, HEADTRACKER_API); #endif