int InputTestApp::OnStartup(int argc, const char** argv) { if (!pPlatform->SetupWindow(1200,800)) return 1; pManager = *DeviceManager::Create(); // This initialization logic supports running two sensors at the same time. DeviceEnumerator<SensorDevice> isensor = pManager->EnumerateDevices<SensorDevice>(); DeviceEnumerator<SensorDevice> oculusSensor; DeviceEnumerator<SensorDevice> oculusSensor2; while(isensor) { DeviceInfo di; if (isensor.GetDeviceInfo(&di)) { if (strstr(di.ProductName, "Tracker")) { if (!oculusSensor) oculusSensor = isensor; else if (!oculusSensor2) oculusSensor2 = isensor; } } isensor.Next(); } if (oculusSensor) { pSensor = *oculusSensor.CreateDevice(); if (pSensor) pSensor->SetRange(SensorRange(4 * 9.81f, 8 * Math<float>::Pi, 1.0f), true); if (oculusSensor2) { // Second Oculus sensor, useful for comparing firmware behavior & settings. pSensor2 = *oculusSensor2.CreateDevice(); if (pSensor2) pSensor2->SetRange(SensorRange(4 * 9.81f, 8 * Math<float>::Pi, 1.0f), true); } } oculusSensor.Clear(); oculusSensor2.Clear(); /* DeviceHandle hHMD = pManager->EnumerateDevices<HMDDevice>(); HMDInfo hmdInfo; if (hHMD) { hHMD.GetDeviceInfo(&hmdInfo); } */ if (pSensor) SFusion.AttachToSensor(pSensor); if (pSensor2) SFusion2.AttachToSensor(pSensor2); /* // Test rotation: This give rotations clockwise (CW) while looking from // origin in the direction of the axis. Vector3f xV(1,0,0); Vector3f zV(0,0,1); Vector3f rxV = Matrix4f::RotationZ(DegreeToRad(10.0f)).Transform(xV); Vector3f ryV = Matrix4f::RotationY(DegreeToRad(10.0f)).Transform(xV); Vector3f rzV = Matrix4f::RotationX(DegreeToRad(10.0f)).Transform(zV); */ // Report relative mouse motion (not absolute position) // pPlatform->SetMouseMode(Mouse_Relative); const char* graphics = "d3d10"; for (int i = 1; i < argc; i++) if (!strcmp(argv[i], "-r") && i < argc-1) graphics = argv[i+1]; pRender = pPlatform->SetupGraphics(OVR_DEFAULT_RENDER_DEVICE_SET, graphics, RendererParams()); //WireframeFill = pRender->CreateSimpleFill(Fill::F_Wireframe); // *** Rotating Box pBox = *new Container; pBox->Add(Ptr<Model>( *Model::CreateAxisFaceColorBox(-2.0f, 2.0f, Color(0, 0xAA, 0), // x = green -1.0f, 1.0f, Color(0xAA,0, 0), // y = red -1.0f, 1.0f, Color(0, 0, 0xAA)) )); // z = blue // Drop-down line from box, to make it easier to see differences in angle. Ptr<Model> downLine = *new Model(Prim_Lines); downLine->AddLine(Vertex(0.0f,-4.5f, 0.0f, 0xFFE0B0B0), Vertex(0.0f, 0.0f, 0.0f, 0xFFE0B0B0)); pBox->Add(downLine); Sc.World.Add(pBox); // Secondary rotating coordinate object, if we have two values. if (pSensor2) { pBox2 = *new Container; // Drop-down line from box, to make it easier to see differences in angle. Ptr<Model> lines = *new Model(Prim_Lines); lines->AddLine(Vertex( 0.0f,-4.0f, 0.0f, 0xFFA07070), // -Y Vertex( 0.0f, 0.0f, 0.0f, 0xFFA07070)); lines->AddLine(Vertex(-4.0f, 0.0f, 0.0f, 0xFF70A070), // -X Vertex( 0.0f, 0.0f, 0.0f, 0xFF70A070)); lines->AddLine(Vertex( 0.0f, 0.0f,-4.0f, 0xFF7070A0), // -Z Vertex( 0.0f, 0.0f, 0.0f, 0xFF7070A0)); pBox2->Add(lines); Sc.World.Add(pBox2); } // *** World axis X,Y,Z rendering. pAxes = *new Model(Prim_Lines); pAxes->AddLine(Vertex(-8.0f, 0.0f, 0.0f, 0xFF40FF40), Vertex( 8.0f, 0.0f, 0.0f, 0xFF40FF40)); // X pAxes->AddLine(Vertex( 7.6f, 0.4f, 0.4f, 0xFF40FF40), Vertex( 8.0f, 0.0f, 0.0f, 0xFF40FF40)); // X - arrow pAxes->AddLine(Vertex( 7.6f,-0.4f,-0.4f, 0xFF40FF40), Vertex( 8.0f, 0.0f, 0.0f, 0xFF40FF40)); // X - arrow pAxes->AddLine(Vertex( 0.0f,-8.0f, 0.0f, 0xFFFF4040), Vertex( 0.0f, 8.0f, 0.0f, 0xFFFF4040)); // Y pAxes->AddLine(Vertex( 0.4f, 7.6f, 0.0f, 0xFFFF4040), Vertex( 0.0f, 8.0f, 0.0f, 0xFFFF4040)); // Y - arrow pAxes->AddLine(Vertex(-0.4f, 7.6f, 0.0f, 0xFFFF4040), Vertex( 0.0f, 8.0f, 0.0f, 0xFFFF4040)); // Y pAxes->AddLine(Vertex( 0.0f, 0.0f,-8.0f, 0xFF4040FF), Vertex( 0.0f, 0.0f, 8.0f, 0xFF4040FF)); // Z pAxes->AddLine(Vertex( 0.4f, 0.0f, 7.6f, 0xFF4040FF), Vertex( 0.0f, 0.0f, 8.0f, 0xFF4040FF)); // Z - arrow pAxes->AddLine(Vertex(-0.4f, 0.0f, 7.6f, 0xFF4040FF), Vertex( 0.0f, 0.0f, 8.0f, 0xFF4040FF)); // Z - arrow Sc.World.Add(pAxes); SetView(CurrentView); LastUpdate = pPlatform->GetAppTime(); return 0; }