/* When creating your project, uncheck OWL, uncheck Class Library, select Static instead of Dynamic and change the target model to Console from GUI. Also link glut.lib to your project once its done. */ #include // Standard Header For Most Programs #include #include #include #include "os_generic.h" #include "linmath.h" #include "fileutil.h" #ifdef __APPLE__ #include // The GL Header File #include // The GL Utility Toolkit (Glut) Header #else #include #include #endif #ifdef __linux__ #include #endif #define RegisterDriver(a,b) #include "poser_daveortho.c" // Required to set up a window #define WIDTH 1280 #define HEIGHT 1280 #define FULLSCREEN 0 int keys[256]; // Regular keyboard keys int sp_keys[256]; // Special keyboard keycodes (GLUT specific) #define LH_ID 0 #define NUM_HMD 32 #define INDIR "dave/full_test_triangle_on_floor/" #define MAX_POINTS SENSORS_PER_OBJECT #define PI 3.1415926535897932386264 #define MOVESPEED 1.0 #define ROTSPEED 5.0 // View space float posx=0.0f; float posy=0.0f; float posz=0.0f; float rotx=0.0f; float roty=0.0f; float rotz=0.0f; // Data for the "fake" ortho solve formula float Tortho[4][4]; // OUTPUT: 4x4 transformation matrix FLOAT S_out[2][MAX_POINTS]; // INPUT: array of screenspace points FLOAT S_in[2][MAX_POINTS]; // INPUT: array of screenspace points FLOAT X_in[3][MAX_POINTS]; // INPUT: array of offsets int nPoints=0; //-------------------------------------------------------------------- // //-------------------------------------------------------------------- void DrawGrid( float minX, float maxX, float minY, float maxY, float minZ, float maxZ, float stepX, float stepY, float stepZ); void DrawCoordinateSystem( float x, float y, float z, float qx, float qy, float qz, float qr); float hmd_pos[NUM_HMD][3]; void ReadHmdPoints() { int i; FILE *fin = fopen(INDIR "HMD_points.csv","r"); if (fin==NULL) { printf("ERROR: could not open " INDIR "HMD_points.csv for reading\n"); exit(1); } for (i=0; i= read_frameno-6 && read_hmdAngleViewed[sweepy][i] >= read_frameno-6 && hmdAngles[sweepx][i]!=-9999.0 && hmdAngles[sweepy][i]!=-9999.0) { S_in[0][nPoints] = hmdAngles[sweepy][i]; S_in[1][nPoints] = hmdAngles[sweepx][i]; X_in[0][nPoints] = hmd_pos[i][0]; X_in[1][nPoints] = hmd_pos[i][1]; X_in[2][nPoints] = hmd_pos[i][2]; printf("i %d S %f %f X %f %f %f frno %d %d currfr %d\n", i, S_in[0][nPoints], S_in[1][nPoints], X_in[0][nPoints], X_in[1][nPoints], X_in[2][nPoints], read_hmdAngleViewed[sweepx][i], read_hmdAngleViewed[sweepy][i], read_frameno); nPoints++; } } read_frameno++; //-------------------------------------------------- // Run the "OrthoSolve" and then the "AffineSolve" //-------------------------------------------------- // Run OrthoSolve OrthoSolve( Tortho, // OUTPUT: 4x4 transformation matrix S_out, // OUTPUT: array of output screenspace points S_in, // INPUT: array of screenspace points X_in, // INPUT: array of offsets nPoints); printf( "POS: %f %f %f\n", Tortho[0][3], Tortho[1][3], Tortho[2][3]); //------------------------ // Draw the inputs //------------------------ glPointSize(3.0); // Draw the input points glColor3f(1.0,0.5,0.5); glBegin(GL_POINTS); for (i=0; i