예제 #1
0
void FTNoIR_Protocol::sendHeadposeToGame(const double* headpose) {
    float yaw = getRadsFromDegrees(headpose[Yaw]);
    float pitch = getRadsFromDegrees(headpose[Pitch]);
    float roll = getRadsFromDegrees(headpose[Roll]);
    float tx = headpose[TX] * 10.f;
    float ty = headpose[TY] * 10.f;
    float tz = headpose[TZ] * 10.f;

    shm.lock();
    
    pMemData->data.RawX = 0;
    pMemData->data.RawY = 0;
    pMemData->data.RawZ = 0;
    pMemData->data.RawPitch = 0;
    pMemData->data.RawYaw = 0;
    pMemData->data.RawRoll = 0;

    pMemData->data.X = tx;
    pMemData->data.Y = ty;
    pMemData->data.Z = tz;
    pMemData->data.Yaw = yaw;
    pMemData->data.Pitch = pitch;
    pMemData->data.Roll = roll;

    pMemData->data.X1 = ++pMemData->data.DataID;
    pMemData->data.X2 = 0;
    pMemData->data.X3 = 0;
    pMemData->data.X4 = 0;
    pMemData->data.Y1 = 0;
    pMemData->data.Y2 = 0;
    pMemData->data.Y3 = 0;
    pMemData->data.Y4 = 0;

    if (intGameID != pMemData->GameID)
    {
        QString gamename;
        CSV::getGameData(pMemData->GameID, pMemData->table, gamename);
        pMemData->GameID2 = pMemData->GameID;
        intGameID = pMemData->GameID;
        QMutexLocker foo(&this->game_name_mutex);
        connected_game = gamename;
    }

	pMemData->data.DataID += 1;
        shm.unlock();
}
예제 #2
0
//
// Update Headpose in Game.
//
void FTNoIR_Protocol::sendHeadposeToGame(double *headpose, double *rawheadpose ) {
float virtPosX;
float virtPosY;
float virtPosZ;

float virtRotX;
float virtRotY;
float virtRotZ;

float headPosX;
float headPosY;
float headPosZ;

float headRotX;
float headRotY;
float headRotZ;

    //
	// Scale the Raw measurements to the client measurements.
	//
    headRotX = getRadsFromDegrees(rawheadpose[Pitch]);
    headRotY = getRadsFromDegrees(rawheadpose[Yaw]);
    headRotZ = getRadsFromDegrees(rawheadpose[Roll]);
    headPosX = rawheadpose[TX] * 10;
    headPosY = rawheadpose[TY] * 10;
    headPosZ = rawheadpose[TZ] * 10;

    virtRotX = getRadsFromDegrees(headpose[Pitch]);
    virtRotY = getRadsFromDegrees(headpose[Yaw]);
    virtRotZ = getRadsFromDegrees(headpose[Roll]);
    virtPosX = headpose[TX] * 10;
    virtPosY = headpose[TY] * 10;
    virtPosZ = headpose[TZ] * 10;

    shm.lock();
    
    pMemData->data.RawX = headPosX;
    pMemData->data.RawY = headPosY;
    pMemData->data.RawZ = headPosZ;
    pMemData->data.RawPitch = headRotX;
    pMemData->data.RawYaw = headRotY;
    pMemData->data.RawRoll = headRotZ;

    //
    //
    pMemData->data.X = virtPosX;
    pMemData->data.Y = virtPosY;
    pMemData->data.Z = virtPosZ;
    pMemData->data.Pitch = virtRotX;
    pMemData->data.Yaw = virtRotY;
    pMemData->data.Roll = virtRotZ;

    //
    // Leave some values 0 yet...
    //
    pMemData->data.X1 = pMemData->data.DataID + 10;
    pMemData->data.X2 = 0;
    pMemData->data.X3 = 0;
    pMemData->data.X4 = 0;
    pMemData->data.Y1 = 0;
    pMemData->data.Y2 = 0;
    pMemData->data.Y3 = 0;
    pMemData->data.Y4 = 0;

    //
    // Check if the handle that was sent to the Game, was changed (on x64, this will be done by the ED-API)
    // If the "Report Program Name" command arrives (which is a '1', for now), raise the event from here!
    //
    //
    // The game-ID was changed?
    //
    if (intGameID != pMemData->GameID)
    {
        QString gamename;
        CSV::getGameData(pMemData->GameID, pMemData->table, gamename);
        pMemData->GameID2 = pMemData->GameID;
        intGameID = pMemData->GameID;
        QMutexLocker foo(&this->game_name_mutex);
        connected_game = gamename;
    }

	pMemData->data.DataID += 1;
    
    shm.unlock();
}