//表示情報を更新 private void updateTexture() { #pragma warning disable 0219 string Tag = "[" + this.GetType().Name + ":" + System.Reflection.MethodBase.GetCurrentMethod(); //クラス名とメソッド名を自動取得 #pragma warning restore 0219 overlay.SetOverlayFlag(overlayHandle, VROverlayFlags.SideBySide_Parallel, SideBySide); //RenderTextureが生成されているかチェック if (!renderTexture.IsCreated()) { Debug.Log(Tag + "RenderTextureがまだ生成されていない"); return; } //RenderTextureからネイティブテクスチャのハンドルを取得 try { overlayTexture.handle = renderTexture.GetNativeTexturePtr(); } catch (UnassignedReferenceException e) { Debug.LogError(Tag + "RenderTextureがセットされていません " + e.ToString()); ProcessError(); return; } //オーバーレイにテクスチャを設定 var overlayError = EVROverlayError.None; overlayError = overlay.SetOverlayTexture(overlayHandle, ref overlayTexture); if (overlayError != EVROverlayError.None) { Debug.LogError(Tag + "Overlayにテクスチャをセットできませんでした. " + overlayError.ToString()); //致命的なエラーとしない return; } }
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); } }
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; } } } }