191 lines
No EOL
4.7 KiB
C
191 lines
No EOL
4.7 KiB
C
// 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 |