JD2022-TU1/main/extern/Camcam/DLLInc/HeadTracker.h

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