public void DisplayEnable() { //オーバーレイを表示する if (overlay != null) { overlay.ShowOverlay(overlayHandle); } }
//すべての処理後 private void LateUpdate() { #pragma warning disable 0219 string Tag = "[" + this.GetType().Name + ":" + System.Reflection.MethodBase.GetCurrentMethod(); //クラス名とメソッド名を自動取得 #pragma warning restore 0219 //エラーが発生した場合や、ハンドルが無効な場合は実行しない if (IsError()) { return; } if (show != oldshow) { oldshow = show; } if (show) { //オーバーレイを表示する overlay.ShowOverlay(overlayHandle); } else { //オーバーレイを非表示にする overlay.HideOverlay(overlayHandle); } //イベントを処理する(終了された時true) if (ProcessEvent()) { Debug.Log(Tag + "VRシステムが終了されました"); ApplicationQuit(); } //オーバーレイが表示されている時 if (show && overlay.IsOverlayVisible(overlayHandle)) { //位置情報と各種設定の更新 updatePosition(); //表示情報の更新 updateTexture(); //Canvasが設定されている場合 if (LaycastRootObject != null) { //GUIタッチ機能の処理 updateVRTouch(); } } if (putLogDevicesInfo) { showDevices(); putLogDevicesInfo = false; } }
public void SetShow(bool show) { if (show) { //オーバーレイを表示する overlay.ShowOverlay(overlayHandle); } else { //オーバーレイを非表示にする overlay.HideOverlay(overlayHandle); } }
// Token: 0x06005F2D RID: 24365 RVA: 0x00215594 File Offset: 0x00213994 private ulong GetOverlayHandle(string overlayName, Transform transform, float widthInMeters = 1f) { ulong num = 0UL; CVROverlay overlay = OpenVR.Overlay; if (overlay == null) { return(num); } string pchOverlayKey = SteamVR_Overlay.key + "." + overlayName; EVROverlayError evroverlayError = overlay.FindOverlay(pchOverlayKey, ref num); if (evroverlayError != EVROverlayError.None) { evroverlayError = overlay.CreateOverlay(pchOverlayKey, overlayName, ref num); } if (evroverlayError == EVROverlayError.None) { overlay.ShowOverlay(num); overlay.SetOverlayAlpha(num, this.alpha); overlay.SetOverlayWidthInMeters(num, widthInMeters); if (SteamVR.instance.textureType == ETextureType.DirectX) { VRTextureBounds_t vrtextureBounds_t = default(VRTextureBounds_t); vrtextureBounds_t.uMin = 0f; vrtextureBounds_t.vMin = 1f; vrtextureBounds_t.uMax = 1f; vrtextureBounds_t.vMax = 0f; overlay.SetOverlayTextureBounds(num, ref vrtextureBounds_t); } SteamVR_Camera steamVR_Camera = (this.loadingScreenDistance != 0f) ? null : SteamVR_Render.Top(); if (steamVR_Camera != null && steamVR_Camera.origin != null) { SteamVR_Utils.RigidTransform rigidTransform = new SteamVR_Utils.RigidTransform(steamVR_Camera.origin, transform); rigidTransform.pos.x = rigidTransform.pos.x / steamVR_Camera.origin.localScale.x; rigidTransform.pos.y = rigidTransform.pos.y / steamVR_Camera.origin.localScale.y; rigidTransform.pos.z = rigidTransform.pos.z / steamVR_Camera.origin.localScale.z; HmdMatrix34_t hmdMatrix34_t = rigidTransform.ToHmdMatrix34(); overlay.SetOverlayTransformAbsolute(num, SteamVR_Render.instance.trackingSpace, ref hmdMatrix34_t); } else { SteamVR_Utils.RigidTransform rigidTransform2 = new SteamVR_Utils.RigidTransform(transform); HmdMatrix34_t hmdMatrix34_t2 = rigidTransform2.ToHmdMatrix34(); overlay.SetOverlayTransformAbsolute(num, SteamVR_Render.instance.trackingSpace, ref hmdMatrix34_t2); } } return(num); }
/* * m_cvrOverlay.ShowOverlay(handle); * * var textureBounds = new VRTextureBounds_t(); * textureBounds.uMin = 0; * textureBounds.uMax = 1; * textureBounds.vMin = 0; * textureBounds.vMax = 1; * m_cvrOverlay.SetOverlayTextureBounds(handle, ref textureBounds); * * HmdMatrix34_t matrix = new HmdMatrix34_t(); * matrix.m = new float[12]; * matrix.m[0] = 1; * matrix.m[5] = 1; * matrix.m[10] = 1; * matrix.m[3] = 0; * matrix.m[7] = 0; * matrix.m[11] = -0.2f; * m_cvrOverlay.SetOverlayTransformTrackedDeviceRelative(handle, m_controller1ID, ref matrix); * * oError = m_cvrOverlay.SetOverlayWidthInMeters(handle, 0.5f); * oError = m_cvrOverlay.SetOverlayInputMethod(handle, VROverlayInputMethod.Mouse); * }*/ public static bool ShowOverlay(string key, bool show) { Debug.Assert(m_cvrOverlay != null); ulong handle = OpenVR.k_ulOverlayHandleInvalid; var oError = m_cvrOverlay.FindOverlay(key, ref handle); if (oError != EVROverlayError.None) { Debug.Fail("Overlay does not exist " + oError.ToString()); return(false); } if (show) { m_cvrOverlay.ShowOverlay(handle); } else { m_cvrOverlay.HideOverlay(handle); } return(true); }
private static EVROverlayError ProcessOverlay2(CVROverlay overlay, ref ulong overlayHandle, ref bool overlayVisible, bool dashboardVisible) { var err = EVROverlayError.None; if (overlayHandle == 0) { err = overlay.FindOverlay("VRCX2", ref overlayHandle); if (err != EVROverlayError.None) { if (err != EVROverlayError.UnknownOverlay) { return(err); } overlayVisible = false; err = overlay.CreateOverlay("VRCX2", "VRCX2", ref overlayHandle); if (err != EVROverlayError.None) { return(err); } err = overlay.SetOverlayAlpha(overlayHandle, 0.9f); if (err != EVROverlayError.None) { return(err); } err = overlay.SetOverlayWidthInMeters(overlayHandle, 1f); if (err != EVROverlayError.None) { return(err); } err = overlay.SetOverlayInputMethod(overlayHandle, VROverlayInputMethod.None); if (err != EVROverlayError.None) { return(err); } var m = Matrix.Scaling(1f); m *= Matrix.Translation(0, -0.3f, -1.5f); var hm34 = new HmdMatrix34_t { m0 = m.M11, m1 = m.M21, m2 = m.M31, m3 = m.M41, m4 = m.M12, m5 = m.M22, m6 = m.M32, m7 = m.M42, m8 = m.M13, m9 = m.M23, m10 = m.M33, m11 = m.M43, }; err = overlay.SetOverlayTransformTrackedDeviceRelative(overlayHandle, OpenVR.k_unTrackedDeviceIndex_Hmd, ref hm34); if (err != EVROverlayError.None) { return(err); } } } if (!dashboardVisible) { var texture = new Texture_t { handle = m_Texture2.NativePointer }; err = overlay.SetOverlayTexture(overlayHandle, ref texture); if (err != EVROverlayError.None) { return(err); } if (!overlayVisible) { err = overlay.ShowOverlay(overlayHandle); if (err != EVROverlayError.None) { return(err); } overlayVisible = true; } } else if (overlayVisible) { err = overlay.HideOverlay(overlayHandle); if (err != EVROverlayError.None) { return(err); } overlayVisible = false; } return(err); }
private static EVROverlayError ProcessOverlay1(CVROverlay overlay, ref ulong overlayHandle, ref bool overlayVisible, bool dashboardVisible, uint overlayIndex, DateTime nextOverlay) { var err = EVROverlayError.None; if (overlayHandle == 0) { err = overlay.FindOverlay("VRCX1", ref overlayHandle); if (err != EVROverlayError.None) { if (err != EVROverlayError.UnknownOverlay) { return(err); } overlayVisible = false; err = overlay.CreateOverlay("VRCX1", "VRCX1", ref overlayHandle); if (err != EVROverlayError.None) { return(err); } err = overlay.SetOverlayAlpha(overlayHandle, 0.9f); if (err != EVROverlayError.None) { return(err); } err = overlay.SetOverlayWidthInMeters(overlayHandle, 1f); if (err != EVROverlayError.None) { return(err); } err = overlay.SetOverlayInputMethod(overlayHandle, VROverlayInputMethod.None); if (err != EVROverlayError.None) { return(err); } } } if (overlayIndex != OpenVR.k_unTrackedDeviceIndexInvalid) { // http://www.opengl-tutorial.org/beginners-tutorials/tutorial-3-matrices // Scaling-Rotation-Translation var m = Matrix.Scaling(0.25f); m *= Matrix.RotationX(m_Rotation[0]); m *= Matrix.RotationY(m_Rotation[1]); m *= Matrix.RotationZ(m_Rotation[2]); m *= Matrix.Translation(m_Translation[0], m_Translation[1], m_Translation[2]); var hm34 = new HmdMatrix34_t { m0 = m.M11, m1 = m.M21, m2 = m.M31, m3 = m.M41, m4 = m.M12, m5 = m.M22, m6 = m.M32, m7 = m.M42, m8 = m.M13, m9 = m.M23, m10 = m.M33, m11 = m.M43, }; err = overlay.SetOverlayTransformTrackedDeviceRelative(overlayHandle, overlayIndex, ref hm34); if (err != EVROverlayError.None) { return(err); } } if (!dashboardVisible && DateTime.UtcNow.CompareTo(nextOverlay) <= 0) { var texture = new Texture_t { handle = m_Texture1.NativePointer }; err = overlay.SetOverlayTexture(overlayHandle, ref texture); if (err != EVROverlayError.None) { return(err); } if (!overlayVisible) { err = overlay.ShowOverlay(overlayHandle); if (err != EVROverlayError.None) { return(err); } overlayVisible = true; } } else if (overlayVisible) { err = overlay.HideOverlay(overlayHandle); if (err != EVROverlayError.None) { return(err); } overlayVisible = false; } return(err); }
private void RenderRoutine() { StartupGL(); if (!StartupOVR()) { CleanupGL(); return; } EVROverlayError overlayError = overlay.ShowOverlay(overlayHandle); if (overlayError != EVROverlayError.None) { Debug.WriteLine("Cannot show overlay."); Debug.WriteLine("Error: " + overlayError.ToString()); CleanupOVR(); CleanupGL(); return; } while (RenderAlive) { DateTime begin = DateTime.Now; GL.Clear(ClearBufferMask.ColorBufferBit | ClearBufferMask.DepthBufferBit); if (CurrentCard == null) { if (CardQueue.TryDequeue(out Card c)) { if (c != null) { CurrentCard = c; continue; } } Thread.Sleep(500); } else { DrawCard(CurrentCard); GL.Clear(ClearBufferMask.DepthBufferBit); if (CurrentCard.Status == CardStatus.Hidden) { CurrentCard = null; Debug.WriteLine("Dropping card."); } overlayError = overlay.SetOverlayTexture(overlayHandle, ref overlayTexture); if (overlayError != EVROverlayError.None) { Debug.WriteLine("Cannot set texture."); Debug.WriteLine("Error: " + overlayError.ToString()); CleanupOVR(); CleanupGL(); return; } } if (EchoWindow) { GL.ClearColor(1, 1, 1, 0); GL.BindFramebuffer(FramebufferTarget.Framebuffer, 0); GL.DrawBuffer(DrawBufferMode.Back); GL.Viewport(0, 0, render_window.Width, render_window.Height); GL.Clear(ClearBufferMask.ColorBufferBit | ClearBufferMask.DepthBufferBit); GL.Disable(EnableCap.Blend); EchoScene.Instance.Draw(); render_window.SwapBuffers(); GL.BindFramebuffer(FramebufferTarget.Framebuffer, frameBufferId); GL.Enable(EnableCap.Blend); GL.DrawBuffer(DrawBufferMode.ColorAttachment0); GL.Viewport(0, 0, textureSizeX, textureSizeY); GL.ClearColor(0, 0, 0, 0); } VREvent_t ev = new VREvent_t(); if (overlay.PollNextOverlayEvent(overlayHandle, ref ev, (uint)Marshal.SizeOf(ev.GetType()))) { switch ((EVREventType)ev.eventType) { case EVREventType.VREvent_OverlayShown: Debug.WriteLine("Overlay shown."); break; case EVREventType.VREvent_OverlayHidden: Debug.WriteLine("Overlay Hidden."); break; } } if (vr.PollNextEvent(ref ev, (uint)Marshal.SizeOf(ev.GetType()))) { switch ((EVREventType)ev.eventType) { case EVREventType.VREvent_Quit: StopRender(); break; case EVREventType.VREvent_DriverRequestedQuit: StopRender(); break; } } DateTime end = DateTime.Now; double ms = (end - begin).TotalMilliseconds; Thread.Sleep((int)(Math.Max(12.0 - ms, 0))); } CleanupOVR(); CleanupGL(); }
public EVROverlayError Show() { return(FOverlay.ShowOverlay(FHandle)); }
public void UpdateOverlay() { CVROverlay overlay = OpenVR.Overlay; if (overlay == null) { return; } if (this.texture != null) { EVROverlayError evroverlayError = overlay.ShowOverlay(this.handle); if ((evroverlayError == EVROverlayError.InvalidHandle || evroverlayError == EVROverlayError.UnknownOverlay) && overlay.FindOverlay(SteamVR_Overlay.key, ref this.handle) != EVROverlayError.None) { return; } Texture_t texture_t = default(Texture_t); texture_t.handle = this.texture.GetNativeTexturePtr(); texture_t.eType = SteamVR.instance.textureType; texture_t.eColorSpace = EColorSpace.Auto; overlay.SetOverlayTexture(this.handle, ref texture_t); overlay.SetOverlayAlpha(this.handle, this.alpha); overlay.SetOverlayWidthInMeters(this.handle, this.scale); overlay.SetOverlayAutoCurveDistanceRangeInMeters(this.handle, this.curvedRange.x, this.curvedRange.y); VRTextureBounds_t vrtextureBounds_t = default(VRTextureBounds_t); vrtextureBounds_t.uMin = this.uvOffset.x * this.uvOffset.z; vrtextureBounds_t.vMin = (1f + this.uvOffset.y) * this.uvOffset.w; vrtextureBounds_t.uMax = (1f + this.uvOffset.x) * this.uvOffset.z; vrtextureBounds_t.vMax = this.uvOffset.y * this.uvOffset.w; overlay.SetOverlayTextureBounds(this.handle, ref vrtextureBounds_t); HmdVector2_t hmdVector2_t = default(HmdVector2_t); hmdVector2_t.v0 = this.mouseScale.x; hmdVector2_t.v1 = this.mouseScale.y; overlay.SetOverlayMouseScale(this.handle, ref hmdVector2_t); SteamVR_Camera steamVR_Camera = SteamVR_Render.Top(); if (steamVR_Camera != null && steamVR_Camera.origin != null) { SteamVR_Utils.RigidTransform rigidTransform = new SteamVR_Utils.RigidTransform(steamVR_Camera.origin, base.transform); rigidTransform.pos.x = rigidTransform.pos.x / steamVR_Camera.origin.localScale.x; rigidTransform.pos.y = rigidTransform.pos.y / steamVR_Camera.origin.localScale.y; rigidTransform.pos.z = rigidTransform.pos.z / steamVR_Camera.origin.localScale.z; rigidTransform.pos.z = rigidTransform.pos.z + this.distance; HmdMatrix34_t hmdMatrix34_t = rigidTransform.ToHmdMatrix34(); overlay.SetOverlayTransformAbsolute(this.handle, SteamVR_Render.instance.trackingSpace, ref hmdMatrix34_t); } overlay.SetOverlayInputMethod(this.handle, this.inputMethod); if (this.curved || this.antialias) { this.highquality = true; } if (this.highquality) { overlay.SetHighQualityOverlay(this.handle); overlay.SetOverlayFlag(this.handle, VROverlayFlags.Curved, this.curved); overlay.SetOverlayFlag(this.handle, VROverlayFlags.RGSS4X, this.antialias); } else if (overlay.GetHighQualityOverlay() == this.handle) { overlay.SetHighQualityOverlay(0UL); } } else { overlay.HideOverlay(this.handle); } }
void Update() { //初期化失敗するなどoverlayが無効な場合は実行しない if (overlay == null || error) { return; } if (show) { //オーバーレイを表示する overlay.ShowOverlay(overlayHandle); } else { //オーバーレイを非表示にする overlay.HideOverlay(overlayHandle); } //イベントを処理する uint uncbVREvent = (uint)System.Runtime.InteropServices.Marshal.SizeOf(typeof(VREvent_t)); while (overlay.PollNextOverlayEvent(overlayHandle, ref Event, uncbVREvent)) { if (eventlog) { Debug.Log(Tag + "Event:" + ((EVREventType)Event.eventType).ToString()); } //Debug.Log(Tag +"Event:"+ (Event.eventType).ToString()); switch ((EVREventType)Event.eventType) { case EVREventType.VREvent_MouseMove: MouseX = Event.data.mouse.x; MouseY = Event.data.mouse.y; break; case EVREventType.VREvent_MouseButtonDown: MouseClick = true; break; case EVREventType.VREvent_MouseButtonUp: MouseClick = false; break; case EVREventType.VREvent_DashboardActivated: break; case EVREventType.VREvent_DashboardDeactivated: break; case EVREventType.VREvent_DashboardRequested: break; case EVREventType.VREvent_DashboardThumbSelected: break; case EVREventType.VREvent_EnterStandbyMode: break; case EVREventType.VREvent_LeaveStandbyMode: break; case EVREventType.VREvent_KeyboardCharInput: break; case EVREventType.VREvent_KeyboardClosed: break; case EVREventType.VREvent_KeyboardDone: break; case EVREventType.VREvent_ResetDashboard: break; case EVREventType.VREvent_ScreenshotTriggered: break; case EVREventType.VREvent_WirelessDisconnect: break; case EVREventType.VREvent_WirelessReconnect: break; case EVREventType.VREvent_Quit: Debug.Log(Tag + "Quit"); ApplicationQuit(); break; default: break; } } if (overlay.IsDashboardVisible()) { //サムネイルにテクスチャを設定 if (thumbnailAvailable) { var overlayError = EVROverlayError.None; overlayError = overlay.SetOverlayTexture(thumbnailHandle, ref thumbnailTexture); if (overlayError != EVROverlayError.None) { Debug.LogError(Tag + "Overlayにサムネイルをセットできませんでした. " + overlayError.ToString()); error = true; return; } } } //オーバーレイが表示されている時 if (overlay.IsOverlayVisible(overlayHandle) && overlay.IsActiveDashboardOverlay(overlayHandle)) { //オーバーレイの大きさ設定(幅のみ。高さはSetOverlayMouseScaleの比から自動計算される) overlay.SetOverlayWidthInMeters(overlayHandle, width); //オーバーレイの透明度を設定 overlay.SetOverlayAlpha(overlayHandle, alpha); //RenderTextureが生成されているかチェック if (!renderTexture.IsCreated()) { Debug.Log(Tag + "RenderTextureがまだ生成されていない"); return; } try { //マウスカーソルスケールを設定する(これにより表示領域のサイズも決定される) vecMouseScale.v0 = renderTexture.width; vecMouseScale.v1 = renderTexture.height; overlay.SetOverlayMouseScale(overlayHandle, ref vecMouseScale); //RenderTextureからネイティブテクスチャのハンドルを取得 overlayTexture.handle = renderTexture.GetNativeTexturePtr(); } catch (UnassignedReferenceException e) { Debug.LogError(Tag + "RenderTextureがセットされていません " + e.ToString()); error = true; return; } //オーバーレイにテクスチャを設定 var overlayError = EVROverlayError.None; overlayError = overlay.SetOverlayTexture(overlayHandle, ref overlayTexture); if (overlayError != EVROverlayError.None) { Debug.LogError(Tag + "Overlayにテクスチャをセットできませんでした. " + overlayError.ToString()); error = true; return; } } }
void Update() { //初期化失敗するなどoverlayが無効な場合は実行しない if (overlay == null) { return; } //オーバーレイを表示する overlay.ShowOverlay(overlayHandle); //オーバーレイを非表示にする //overlay.HideOverlay(overlayHandle); //オーバーレイが表示されている時 if (overlay.IsOverlayVisible(overlayHandle)) { var offset = new SteamVR_Utils.RigidTransform(); if (RenderTarget != null) { offset.pos = new Vector3(RenderTarget.position.x, RenderTarget.position.y, RenderTarget.position.z); offset.rot = RenderTarget.rotation; } else { offset.pos = new Vector3(0, 0, 0); offset.rot = Quaternion.Euler(0, 0, 0); } var t = offset.ToHmdMatrix34(); t.m5 = -1; overlay.SetOverlayTransformAbsolute(overlayHandle, SteamVR_Render.instance.trackingSpace, ref t); //RenderTextureが生成されているかチェック if (!renderTexture.IsCreated()) { Debug.Log(Tag + "RenderTextureがまだ生成されていない"); return; } //RenderTextureからネイティブテクスチャのハンドルを取得 try { overlayTexture.handle = renderTexture.GetNativeTexturePtr(); } catch (UnassignedReferenceException e) { Debug.LogError(Tag + "RenderTextureがセットされていません"); ApplicationQuit(); return; } //オーバーレイにテクスチャを設定 var overlayError = EVROverlayError.None; overlayError = overlay.SetOverlayTexture(overlayHandle, ref overlayTexture); if (overlayError != EVROverlayError.None) { Debug.LogError(Tag + "Overlayにテクスチャをセットできませんでした. " + overlayError.ToString()); ApplicationQuit(); return; } } }
private void Update() { #pragma warning disable 0219 string Tag = "[" + this.GetType().Name + ":" + System.Reflection.MethodBase.GetCurrentMethod(); //クラス名とメソッド名を自動取得 #pragma warning restore 0219 //エラーが発生した場合や、ハンドルが無効な場合は実行しない if (IsError()) { return; } //イベントを処理する(終了された時true) if (ProcessEvent()) { Debug.Log(Tag + "VRシステムが終了されました"); ApplicationQuit(); } //サイドバイサイド3D overlay.SetOverlayFlag(overlayHandle, VROverlayFlags.SideBySide_Parallel, true); overlay.ShowOverlay(overlayHandle); //オーバーレイが表示されている時 if (overlay.IsOverlayVisible(overlayHandle)) { if (overlay.IsOverlayVisible(overlayHandle)) { //widthをセット インスペクタからいじれる overlay.SetOverlayWidthInMeters(overlayHandle, width); //HMD視点位置変換行列に書き込む。 //ここでは回転なし、平行移動ありのHUD的な状態にしている。 var wx = -0f; var wy = -0f; var wz = -overlayScreenDepth; p.m0 = 1; p.m1 = 0; p.m2 = 0; p.m3 = wx; p.m4 = 0; p.m5 = 1; p.m6 = 0; p.m7 = wy; p.m8 = 0; p.m9 = 0; p.m10 = 1; p.m11 = wz; //回転行列を元に、HMDからの相対的な位置にオーバーレイを表示する。 //代わりにSetOverlayTransformAbsoluteを使用すると、ルーム空間に固定することができる uint indexunTrackedDevice = 0;//0=HMD(他にControllerやTrackerにすることもできる) overlay.SetOverlayTransformTrackedDeviceRelative(overlayHandle, indexunTrackedDevice, ref p); //RenderTextureが生成されているかチェック if (!renderTexture.IsCreated()) { Debug.Log(Tag + "RenderTextureがまだ生成されていない"); return; } //RenderTextureからネイティブテクスチャのハンドルを取得 try { overlayTexture.handle = renderTexture.GetNativeTexturePtr(); } catch (UnassignedReferenceException e) { Debug.LogError(Tag + "RenderTextureがセットされていません"); ApplicationQuit(); return; } //オーバーレイにテクスチャを設定 var overlayError = EVROverlayError.None; overlayError = overlay.SetOverlayTexture(overlayHandle, ref overlayTexture); if (overlayError != EVROverlayError.None) { Debug.LogError(Tag + "Overlayにテクスチャをセットできませんでした. " + overlayError.ToString()); ApplicationQuit(); return; } } } }
void Start() { var openVRError = EVRInitError.None; var overlayError = EVROverlayError.None; //OpenVRの初期化 openvr = OpenVR.Init(ref openVRError, EVRApplicationType.VRApplication_Overlay); if (openVRError != EVRInitError.None) { Debug.LogError(Tag + "OpenVRの初期化に失敗." + openVRError.ToString()); ApplicationQuit(); return; } //オーバーレイ機能の初期化 overlay = OpenVR.Overlay; overlayError = overlay.CreateOverlay(OverlayKey, OverlayFriendlyName, ref overlayHandle); if (overlayError != EVROverlayError.None) { Debug.LogError(Tag + "Overlayの初期化に失敗. " + overlayError.ToString()); ApplicationQuit(); return; } //オーバーレイの大きさ設定(幅のみ。高さはテクスチャの比から自動計算される) var width = 2.0f; overlay.SetOverlayWidthInMeters(overlayHandle, width); //オーバーレイの不透明度を設定 var alpha = 0.9f; overlay.SetOverlayAlpha(overlayHandle, alpha); //オーバーレイに渡すテクスチャ種類の設定 var isOpenGL = SystemInfo.graphicsDeviceVersion.Contains("OpenGL"); if (isOpenGL) { //pGLuintTexture overlayTexture.eType = ETextureType.OpenGL; //上下反転しない textureYflip = 1; } else { //pTexture overlayTexture.eType = ETextureType.DirectX; //上下反転する textureYflip = -1; } //変換行列の初期設定 ChangedSlidersValue(); //オーバーレイを表示する overlay.ShowOverlay(overlayHandle); Debug.Log(Tag + "初期化完了しました"); }
/** * Show the overlay */ public void Show() { ReportError(overlay.ShowOverlay(handle)); }
void Update() { //初期化失敗するなどoverlayが無効な場合は実行しない if (overlay == null) { return; } //オーバーレイを表示する overlay.ShowOverlay(overlayHandle); //オーバーレイを非表示にする //overlay.HideOverlay(overlayHandle); //オーバーレイが表示されている時 if (overlay.IsOverlayVisible(overlayHandle)) { //HMD視点位置変換行列に書き込む。 //ここでは回転なし、平行移動ありのHUD的な状態にしている。 var wx = -0f; var wy = -0f; var wz = -10f; pose.m0 = 1; pose.m1 = 0; pose.m2 = 0; pose.m3 = wx; pose.m4 = 0; pose.m5 = textureYflip; pose.m6 = 0; pose.m7 = wy; pose.m8 = 0; pose.m9 = 0; pose.m10 = 1; pose.m11 = wz; //回転行列を元に、HMDからの相対的な位置にオーバーレイを表示する。 //代わりにSetOverlayTransformAbsoluteを使用すると、ルーム空間に固定することができる uint indexunTrackedDevice = 0; //0=HMD(他にControllerやTrackerにすることもできる) overlay.SetOverlayTransformTrackedDeviceRelative(overlayHandle, indexunTrackedDevice, ref pose); //RenderTextureが生成されているかチェック if (!renderTexture.IsCreated()) { Debug.Log(Tag + "RenderTextureがまだ生成されていない"); return; } //RenderTextureからネイティブテクスチャのハンドルを取得 try { overlayTexture.handle = renderTexture.GetNativeTexturePtr(); } catch (UnassignedReferenceException e) { Debug.LogError(Tag + "RenderTextureがセットされていません"); ApplicationQuit(); return; } //オーバーレイにテクスチャを設定 var overlayError = EVROverlayError.None; overlayError = overlay.SetOverlayTexture(overlayHandle, ref overlayTexture); if (overlayError != EVROverlayError.None) { Debug.LogError(Tag + "Overlayにテクスチャをセットできませんでした. " + overlayError.ToString()); ApplicationQuit(); return; } } }