/*************************************************************** * Function: preFrame() ***************************************************************/ void Maze2::preFrame() { /* get pointer position in world space */ Matrixf invBaseMat = PluginHelper::getWorldToObjectTransform(); Matrixf viewMat = PluginHelper::getHeadMat(0); Matrixf xformMat = PluginHelper::getObjectMatrix(); /* get viewer's position in world space */ Vec3 viewOrg = viewMat.getTrans() * invBaseMat; Vec3 viewPos = Vec3(0.0, 1.0, 0.0) * viewMat * invBaseMat; Vec3 viewDir = viewPos - viewOrg; viewDir.normalize(); mAudioConfigHandler->updatePoses(viewDir, viewPos); mNaviHandler->updateNaviStates(Navigation::instance()->getScale(), viewDir, viewPos); // mNaviHandler->updateButtonStates(); mNaviHandler->updateXformMat(); /* ECGClient: Master-Slave operations: Read current time for update */ double frameDuration; if(ComController::instance()->isMaster()) { frameDuration = PluginHelper::getLastFrameDuration(); ((double*)mClkBuf)[0] = frameDuration; ComController::instance()->sendSlaves((char*) &mClkBuf, sizeof(mClkBuf)); } else { ComController::instance()->readMaster((char*) &mClkBuf, sizeof(mClkBuf)); frameDuration = ((double*)mClkBuf)[0]; } mECGClient->update(viewMat, invBaseMat, xformMat, frameDuration); /* cerr << "viewPos = " << viewPos.x() << " " << viewPos.y() << " " << viewPos.z() << endl; cerr << "scale = " << PluginHelper::getObjectScale() << endl; cerr << "invBaseMat: " << endl; cerr << invBaseMat(0, 0) << " " << invBaseMat(0, 1) << " " << invBaseMat(0, 2) << " " << invBaseMat(0, 3) << " " << endl; cerr << invBaseMat(1, 0) << " " << invBaseMat(1, 1) << " " << invBaseMat(1, 2) << " " << invBaseMat(1, 3) << " " << endl; cerr << invBaseMat(2, 0) << " " << invBaseMat(2, 1) << " " << invBaseMat(2, 2) << " " << invBaseMat(2, 3) << " " << endl; cerr << invBaseMat(3, 0) << " " << invBaseMat(3, 1) << " " << invBaseMat(3, 2) << " " << invBaseMat(3, 3) << " " << endl; cerr << "xformMat: " << endl; cerr << xformMat(0, 0) << " " << xformMat(0, 1) << " " << xformMat(0, 2) << " " << xformMat(0, 3) << " " << endl; cerr << xformMat(1, 0) << " " << xformMat(1, 1) << " " << xformMat(1, 2) << " " << xformMat(1, 3) << " " << endl; cerr << xformMat(2, 0) << " " << xformMat(2, 1) << " " << xformMat(2, 2) << " " << xformMat(2, 3) << " " << endl; cerr << xformMat(3, 0) << " " << xformMat(3, 1) << " " << xformMat(3, 2) << " " << xformMat(3, 3) << " " << endl; cerr << "viewMat: " << endl; cerr << viewMat(0, 0) << " " << viewMat(0, 1) << " " << viewMat(0, 2) << " " << viewMat(0, 3) << " " << endl; cerr << viewMat(1, 0) << " " << viewMat(1, 1) << " " << viewMat(1, 2) << " " << viewMat(1, 3) << " " << endl; cerr << viewMat(2, 0) << " " << viewMat(2, 1) << " " << viewMat(2, 2) << " " << viewMat(2, 3) << " " << endl; cerr << viewMat(3, 0) << " " << viewMat(3, 1) << " " << viewMat(3, 2) << " " << viewMat(3, 3) << " " << endl; cerr << endl; */ }
/*************************************************************** * Function: preFrame() ***************************************************************/ void EOGCalibration::preFrame() { Matrixf invBaseMat = PluginHelper::getWorldToObjectTransform(); Matrixf viewMat = PluginHelper::getHeadMat(0); Matrixf xformMat = PluginHelper::getObjectMatrix(); /* get viewer's position in world space */ Vec3 viewOrg = viewMat.getTrans() * invBaseMat; Vec3 viewPos = Vec3(0.0, 1.0, 0.0) * viewMat * invBaseMat; Vec3 viewDir = viewPos - viewOrg; viewDir.normalize(); //mAudioConfigHandler->updatePoses(viewDir, viewPos); //mNaviHandler->updateNaviStates(Navigation::instance()->getScale(), viewDir, viewPos); //mNaviHandler->updateButtonStates(); //mNaviHandler->updateXformMat(); /* ECGClient: Master-Slave operations: Read current time for update */ double frameDuration; if(ComController::instance()->isMaster()) { frameDuration = PluginHelper::getLastFrameDuration(); ((double*)mClkBuf)[0] = frameDuration; cvr::ComController::instance()->sendSlaves((char*) &mClkBuf, sizeof(mClkBuf)); } else { cvr::ComController::instance()->readMaster((char*) &mClkBuf, sizeof(mClkBuf)); frameDuration = ((double*)mClkBuf)[0]; } /* update inverse base matrix for re-aligning calibration field */ mInvBaseMat = viewMat * invBaseMat; mCaliController->updateViewMat(viewMat); /* DEBUGGING OUTPUT: Head position and orientations in CAVE space Vec3 rightVec = Vec3(viewMat(0, 0), viewMat(0, 1), viewMat(0, 2)); Vec3 frontVec= Vec3(viewMat(1, 0), viewMat(1, 1), viewMat(1, 2)); Vec3 upVec = Vec3(viewMat(2, 0), viewMat(2, 1), viewMat(2, 2)); Vec3 headPos = Vec3(viewMat(3, 0), viewMat(3, 1), viewMat(3, 2)) / 1000.f; cerr << "Right vector = " << rightVec.x() << " " << rightVec.y() << " " << rightVec.z() << endl; cerr << "Front vector = " << frontVec.x() << " " << frontVec.y() << " " << frontVec.z() << endl; cerr << "Up vector = " << upVec.x() << " " << upVec.y() << " " << upVec.z() << endl; cerr << "Head position = " << headPos.x() << " " << headPos.y() << " " << headPos.z() << endl; // cerr << "phi = " << phi << " theta = " << theta << " rad = " << rad << endl; cerr << endl; DEBUGGING OUTPUT: Viewer positions and orientations in world space Vec3 rightVec = Vec3(xformMat(0, 0), xformMat(0, 1), xformMat(0, 2)); Vec3 frontVec= Vec3(xformMat(1, 0), xformMat(1, 1), xformMat(1, 2)); Vec3 upVec = Vec3(xformMat(2, 0), xformMat(2, 1), xformMat(2, 2)); Vec3 headPos = Vec3(xformMat(0, 3), xformMat(1, 3), xformMat(2, 3)) / 1000.f * (-1); cerr << "Right vector = " << rightVec.x() << " " << rightVec.y() << " " << rightVec.z() << endl; cerr << "Front vector = " << frontVec.x() << " " << frontVec.y() << " " << frontVec.z() << endl; cerr << "Up vector = " << upVec.x() << " " << upVec.y() << " " << upVec.z() << endl; cerr << "Head position = " << headPos.x() << " " << headPos.y() << " " << headPos.z() << endl; cerr << endl; */ float phi, theta, rad; if (mCaliController->isCaliBallVisible()) { mCaliController->updateCaliTime(frameDuration); mCaliController->updateCaliBallPos(phi, theta, rad); } if (mCaliController->isPlaybackBallVisible()) { mCaliController->updatePlaybackTime(frameDuration); mCaliController->updatePlaybackBallPos(); playbackTimerLabel->setText(mCaliController->getPlaybackTimeLabel()); } /* create client message and send to data server */ if (mFlagConnected && mFlagMaster && mCaliController->isCalibrationStarted() && mCaliController->isCaliBallVisible()) { Vec3 headPos = Vec3(viewMat(3, 0), viewMat(3, 1), viewMat(3, 2)) / 1000.f; struct MSGClient msg(viewMat(0, 0), viewMat(0, 1), viewMat(0, 2), viewMat(1, 0), viewMat(1, 1), viewMat(1, 2), viewMat(2, 0), viewMat(2, 1), viewMat(2, 2), headPos.x(), headPos.y(), headPos.z(), phi, theta, rad); int nBytes = send(mSockfd, &msg, sizeof (MSGClient), 0); if (nBytes != sizeof (MSGClient)) { std::cerr << "EOGCalibration Warning: Lost data transmission. nBytes = " << nBytes << std::endl; } } }
/*************************************************************** * Function: preFrame() ***************************************************************/ void CaveCADBeta::preFrame() { /* get pointer position in world space */ Matrixf invBaseMat = PluginHelper::getWorldToObjectTransform(); Matrixf baseMat = PluginHelper::getObjectToWorldTransform(); Matrixf viewMat = PluginHelper::getHeadMat(0); Matrixf pointerMat = TrackingManager::instance()->getHandMat(0); Vec3 pointerPos = Vec3(0.0, 1000.0, 0.0) * pointerMat * invBaseMat; Vec3 pointerOrg = Vec3(0.0, 0.0, 0.0) * pointerMat * invBaseMat; /* get viewer's position in world space */ Vec3 viewOrg = viewMat.getTrans() * invBaseMat; Vec3 viewPos = Vec3(0.0, 1000.0, 0.0) * viewMat * invBaseMat; Vec3 viewDir = viewPos - viewOrg; viewDir.normalize(); /* handle pointer/update events */ // coPointerButton* pointerBtn = cover->getPointerButton(); unsigned int btn = TrackingManager::instance()->getRawButtonMask(); // if (pointerBtn->wasPressed()) if (btn) { if (!pointerPressFlag) { pointerPressFlag = true; pointerPressEvent(pointerOrg, pointerPos); } } // else if (pointerBtn->wasReleased()) else if (!btn) { pointerReleaseEvent(); pointerPressFlag = false; } else { pointerMoveEvent(pointerOrg, pointerPos); } mCAVEDesigner->update(viewDir, viewPos); /* spin wheel and top pointer buttons */ float spinX = PluginHelper::getValuator(0, 0); float spinY = PluginHelper::getValuator(0, 1); int pointerStat = TrackingManager::instance()->getRawButtonMask(); spinWheelEvent(spinX, spinY, pointerStat); /* Debugging codes for model calibration float scale = PluginHelper::getObjectScale(); Matrix xMat = PluginHelper::getObjectMatrix(); cerr << endl << "Scale = " << scale << endl; cerr << xMat(0, 0) << " " << xMat(0, 1) << " " << xMat(0, 2) << " " << xMat(0, 3) << endl; cerr << xMat(1, 0) << " " << xMat(1, 1) << " " << xMat(1, 2) << " " << xMat(1, 3) << endl; cerr << xMat(2, 0) << " " << xMat(2, 1) << " " << xMat(2, 2) << " " << xMat(2, 3) << endl; cerr << xMat(3, 0) << " " << xMat(3, 1) << " " << xMat(3, 2) << " " << xMat(3, 3) << endl; cerr << " Frame Count = " << frameCnt++ << endl; */ }