void InputTestApp::OnIdle() { double curtime = pPlatform->GetAppTime(); // float dt = float(LastUpdate - curtime); LastUpdate = curtime; if (pBox) { Quatf q = SFusion.GetOrientation(); pBox->SetOrientation(q); // Test Euler conversion, alternative to the above: // Vector3f euler; // SFusion.GetOrientation().GetEulerABC<Axis_Y, Axis_X, Axis_Z, Rotate_CCW, Handed_R>(&euler.y, &euler.x, &euler.z); // Matrix4f mat = Matrix4f::RotationY(euler.y) * Matrix4f::RotationX(euler.x) * Matrix4f::RotationZ(euler.z); // pBox->SetMatrix(mat); // Update titlebar every 20th of a second. if ((curtime - LastTitleUpdate) > 0.05f) { char titleBuffer[512]; SensorDevice::CoordinateFrame coord = SensorDevice::Coord_Sensor; if (pSensor) coord = pSensor->GetCoordinateFrame(); OVR_sprintf(titleBuffer, 512, "OVR SensorBox %s %s Ang: %0.3f", (SFusion.IsGravityEnabled() ? "" : "[Grav Off]"), (coord == SensorDevice::Coord_HMD) ? "[HMD Coord]" : "", CalcDownAngleDegrees(q)); pPlatform->SetWindowTitle(titleBuffer); LastTitleUpdate = curtime; } } if (pBox2) { pBox2->SetOrientation(SFusion2.GetOrientation()); } // Render int w, h; pPlatform->GetWindowSize(&w, &h); pRender->SetViewport(0, 0, w, h); pRender->Clear(); pRender->BeginScene(); pRender->SetProjection(Proj); pRender->SetDepthMode(1,1); Sc.Render(pRender, View); pRender->Present(); }
void InputTestApp::OnIdle() { double curtime = pPlatform->GetAppTime(); time_t t = time(0); // get time now struct tm * now = localtime(&t); // float dt = float(LastUpdate - curtime); LastUpdate = curtime; if (pBox) { Vector3f acceldata = SFusion.GetAcceleration(); Vector3f gyrodata = SFusion.GetAngularVelocity(); Vector3f magdata = SFusion.GetMagnetometer(); Quatf q = SFusion.GetOrientation(); pBox->SetOrientation(q); //fstream outFile; //outFile.open("C://Users//Barrett//Documents//oculus_sensor_data.txt"); // Output the sensor data to the text file ofstream outFile("C://Users//Barrett//Documents//oculus_sensor_data.csv", ios::app); outFile << \ now->tm_sec << "," << \ curtime << "," << \ acceldata.x << "," << acceldata.y << "," << acceldata.z << "," << \ gyrodata.x << "," << gyrodata.y << "," << gyrodata.z << "," << \ magdata.x << "," << magdata.y << "," << magdata.z << "," << \ q.x << "," << q.y << "," << q.z << q.w << "\n"; // Test Euler conversion, alternative to the above: // Vector3f euler; // SFusion.GetOrientation().GetEulerABC<Axis_Y, Axis_X, Axis_Z, Rotate_CCW, Handed_R>(&euler.y, &euler.x, &euler.z); // Matrix4f mat = Matrix4f::RotationY(euler.y) * Matrix4f::RotationX(euler.x) * Matrix4f::RotationZ(euler.z); // pBox->SetMatrix(mat); // Update titlebar every 20th of a second. if ((curtime - LastTitleUpdate) > 0.05f) { char titleBuffer[512]; SensorDevice::CoordinateFrame coord = SensorDevice::Coord_Sensor; if (pSensor) coord = pSensor->GetCoordinateFrame(); OVR_sprintf(titleBuffer, 512, "OVR SensorBox %s %s Ang: %0.3f", (SFusion.IsGravityEnabled() ? "" : "[Grav Off]"), (coord == SensorDevice::Coord_HMD) ? "[HMD Coord]" : "", CalcDownAngleDegrees(q)); pPlatform->SetWindowTitle(titleBuffer); LastTitleUpdate = curtime; } } if (pBox2) { pBox2->SetOrientation(SFusion2.GetOrientation()); } // Render int w, h; pPlatform->GetWindowSize(&w, &h); pRender->SetViewport(0, 0, w, h); pRender->Clear(); pRender->BeginScene(); pRender->SetProjection(Proj); pRender->SetDepthMode(1,1); Sc.Render(pRender, View); pRender->Present(); }
void OculusWorldDemoApp::Render(const StereoEyeParams& stereo) { if(stereo.Eye == StereoEye_Left) { GrabFrame(); } pRender->BeginScene(PostProcess); // *** 3D - Configures Viewport/Projection and Render pRender->ApplyStereoParams(stereo); pRender->Clear(); pRender->SetDepthMode(true, true); MainScene.Render(pRender, stereo.ViewAdjust * View); // *** 2D Text & Grid - Configure Orthographic rendering. // Render UI in 2D orthographic coordinate system that maps [-1,1] range // to a readable FOV area centered at your eye and properly adjusted. pRender->ApplyStereoParams2D(stereo); pRender->SetDepthMode(false, false); float unitPixel = SConfig.Get2DUnitPixel(); float textHeight= unitPixel * 22; // Display Loading screen-shot in frame 0. if (LoadingState != LoadingState_Finished) { LoadingScene.Render(pRender, Matrix4f()); String loadMessage = String("Loading...."); DrawTextBox(pRender, 0.0f, 0.0f, textHeight, loadMessage.ToCStr(), DrawText_HCenter); LoadingState = LoadingState_DoLoad; } cv::Size size = lastFrame->size(); char * imageData = (char *)malloc(size.width * size.height * 4); int pointer = 0; int c = 0; while(c < size.width * size.height * 3) { imageData[pointer++] = lastFrame->data[(c++)+2]; imageData[pointer++] = lastFrame->data[c++]; imageData[pointer++] = lastFrame->data[(c++)-2]; imageData[pointer++] = 0xFF; } Texture* tex = pRender->CreateTexture(Texture_RGBA, size.width, size.height, imageData, 1); ShaderFill* image = (ShaderFill*)pRender->CreateTextureFill(tex, false); // Left, top, right, bottom, image, alpha pRender->RenderImage(pictureSize, pictureSize, -pictureSize, -pictureSize, image, 255); delete image; delete tex; free(imageData); if(!AdjustMessage.IsEmpty() && AdjustMessageTimeout > pPlatform->GetAppTime()) { DrawTextBox(pRender,0.0f,0.4f, textHeight, AdjustMessage.ToCStr(), DrawText_HCenter); } switch(TextScreen) { case Text_Config: { char textBuff[2048]; OVR_sprintf(textBuff, sizeof(textBuff), "Fov\t300 %9.4f\n" "EyeDistance\t300 %9.4f\n" "DistortionK0\t300 %9.4f\n" "DistortionK1\t300 %9.4f\n" "DistortionK2\t300 %9.4f\n" "DistortionK3\t300 %9.4f\n" "TexScale\t300 %9.4f", SConfig.GetYFOVDegrees(), SConfig.GetIPD(), SConfig.GetDistortionK(0), SConfig.GetDistortionK(1), SConfig.GetDistortionK(2), SConfig.GetDistortionK(3), SConfig.GetDistortionScale()); DrawTextBox(pRender, 0.0f, 0.0f, textHeight, textBuff, DrawText_Center); } break; default: break; } pRender->FinishScene(); }