//====================================================================================== // Oculus Rift使用の初期化 //====================================================================================== int InitOculusRift() { // LibOVRの初期化 ovr_Initialize(); // 接続されている HMD を取得 HMD = ovrHmd_Create(0); if (!HMD) { // 存在しなかった MessageBoxA(NULL, "Oculus Riftがみつかりませんでした。", "", MB_OK); return(1); } // HMDの詳細情報を取得 ovrHmd_GetDesc(HMD, &HMDDesc); if (HMDDesc.DisplayDeviceName[0] == '\0') { // HMDは存在したが該当するディスプレイがなかった。 MessageBoxA(NULL, "Oculus Riftはみつかりましたが出力先ディスプレイがみつかりませんでした。", "", MB_OK); } return 0; }
void OculusInterface::init() { try { ovr_Initialize(); hmd = ovrHmd_Create(0); if(hmd) ovrHmd_GetDesc(hmd, &hmdDesc); else throw 0; } catch(int e) { cout << "Cannot get HMD" << endl; //for now. // initialized = false; // return; //TODO replace content of this exeption catch by creating a virtual debug HMD to run correctly hmd = ovrHmd_CreateDebug(ovrHmd_DK2); ovrHmd_GetDesc(hmd, &hmdDesc); } customReport(); try { if(!ovrHmd_StartSensor(hmd,ovrSensorCap_Orientation |ovrSensorCap_YawCorrection |ovrSensorCap_Position,ovrSensorCap_Orientation)) //minial required throw string("Unable to start sensor! The detected device by OVR is not capable to get sensor state. We cannot do anything with that..."); } catch (string const& e) { cerr << e << endl; ovrHmd_Destroy(hmd); ovr_Shutdown(); abort(); } initialized = true; }
void RiftSetup() { ovr_Initialize(); s_hmd = ovrHmd_Create(0); if (!s_hmd) { s_hmd = ovrHmd_CreateDebug(ovrHmd_DK1); } ovrHmd_GetDesc(s_hmd, &s_hmdDesc); DumpHMDInfo(s_hmdDesc); uint32_t supportedSensorCaps = ovrSensorCap_Orientation; uint32_t requiredSensorCaps = ovrSensorCap_Orientation; ovrBool success = ovrHmd_StartSensor(s_hmd, supportedSensorCaps, requiredSensorCaps); if (!success) { fprintf(stderr, "ERROR: HMD does not have required capabilities!\n"); exit(2); } // Figure out dimensions of render target ovrSizei recommenedTex0Size = ovrHmd_GetFovTextureSize(s_hmd, ovrEye_Left, s_hmdDesc.DefaultEyeFov[0], 1.0f); ovrSizei recommenedTex1Size = ovrHmd_GetFovTextureSize(s_hmd, ovrEye_Right, s_hmdDesc.DefaultEyeFov[1], 1.0f); s_renderTargetSize.w = recommenedTex0Size.w + recommenedTex1Size.w; s_renderTargetSize.h = std::max(recommenedTex0Size.h, recommenedTex1Size.h); CreateRenderTarget(s_renderTargetSize.w, s_renderTargetSize.h); s_eyeTexture[0].Header.API = ovrRenderAPI_OpenGL; s_eyeTexture[0].Header.TextureSize = s_renderTargetSize; s_eyeTexture[0].Header.RenderViewport.Pos = {0, 0}; s_eyeTexture[0].Header.RenderViewport.Size = {s_renderTargetSize.w / 2, s_renderTargetSize.h}; ((ovrGLTexture*)(&s_eyeTexture[0]))->OGL.TexId = s_fboTex; s_eyeTexture[1].Header.API = ovrRenderAPI_OpenGL; s_eyeTexture[1].Header.TextureSize = s_renderTargetSize; s_eyeTexture[1].Header.RenderViewport.Pos = {s_renderTargetSize.w / 2, 0}; s_eyeTexture[1].Header.RenderViewport.Size = {s_renderTargetSize.w / 2, s_renderTargetSize.h}; ((ovrGLTexture*)(&s_eyeTexture[1]))->OGL.TexId = s_fboTex; // Configure ovr SDK Rendering ovrGLConfig cfg; memset(&cfg, 0, sizeof(ovrGLConfig)); cfg.OGL.Header.API = ovrRenderAPI_OpenGL; cfg.OGL.Header.RTSize = {s_config->width, s_config->height}; cfg.OGL.Header.Multisample = 0; // TODO: on windows need to set HWND, on Linux need to set other parameters if (!ovrHmd_ConfigureRendering(s_hmd, &cfg.Config, s_hmdDesc.DistortionCaps, s_hmdDesc.DefaultEyeFov, s_eyeRenderDesc)) { fprintf(stderr, "ERROR: HMD configure rendering failed!\n"); exit(3); } }
int OculusWorldDemoApp::OnStartup(int argc, const char** argv) { // *** Oculus HMD & Sensor Initialization // Create DeviceManager and first available HMDDevice from it. // Sensor object is created from the HMD, to ensure that it is on the // correct device. ovr_Initialize(); Hmd = ovrHmd_Create(0); if (!Hmd) { // If we didn't detect an Hmd, create a simulated one for debugging. Hmd = ovrHmd_CreateDebug(ovrHmd_DK1); UsingDebugHmd = true; if (!Hmd) { // Failed Hmd creation. return 1; } } // Get more details about the HMD. ovrHmd_GetDesc(Hmd, &HmdDesc); WindowSize = HmdDesc.Resolution; // ***** Setup System Window & rendering. if (!SetupWindowAndRendering(argc, argv)) return 1; // Initialize FovSideTanMax, which allows us to change all Fov sides at once - Fov // starts at default and is clamped to this value. FovSideTanLimit = FovPort::Max(HmdDesc.MaxEyeFov[0], HmdDesc.MaxEyeFov[1]).GetMaxSideTan(); FovSideTanMax = FovPort::Max(HmdDesc.DefaultEyeFov[0], HmdDesc.DefaultEyeFov[1]).GetMaxSideTan(); PositionTrackingEnabled = (HmdDesc.SensorCaps & ovrSensorCap_Position) ? true : false; // *** Configure HMD Stereo settings. CalculateHmdValues(); // Query eye height. ThePlayer.UserEyeHeight = ovrHmd_GetFloat(Hmd, OVR_KEY_EYE_HEIGHT, ThePlayer.UserEyeHeight); ThePlayer.BodyPos.y = ThePlayer.UserEyeHeight; // Center pupil for customization; real game shouldn't need to adjust this. CenterPupilDepthMeters = ovrHmd_GetFloat(Hmd, "CenterPupilDepth", 0.0f); ThePlayer.bMotionRelativeToBody = false; // Default to head-steering for DK1 if (UsingDebugHmd) Menu.SetPopupMessage("NO HMD DETECTED"); else if (!(ovrHmd_GetSensorState(Hmd, 0.0f).StatusFlags & ovrStatus_OrientationTracked)) Menu.SetPopupMessage("NO SENSOR DETECTED"); else Menu.SetPopupMessage("Press F9 for Full-Screen on Rift"); // Give first message 10 sec timeout, add border lines. Menu.SetPopupTimeout(10.0f, true); PopulateOptionMenu(); // *** Identify Scene File & Prepare for Loading InitMainFilePath(); PopulatePreloadScene(); LastUpdate = ovr_GetTimeInSeconds(); return 0; }