/** * Set overlay's mouse scale */ public void SetMouseScale(float v0, float v1) { var vecMouseScale = new HmdVector2_t(); vecMouseScale.v0 = v0; vecMouseScale.v1 = v1; ReportError(overlay.SetOverlayMouseScale(handle, ref vecMouseScale)); }
public void SetMouseScale(float X, float Y) { //マウスカーソルスケールを設定する(これにより表示領域のサイズも決定される) HmdVector2_t vecMouseScale = new HmdVector2_t { v0 = X, v1 = Y }; overlay.SetOverlayMouseScale(overlayHandle, ref vecMouseScale); }
//位置情報を更新 private void updatePosition() { #pragma warning disable 0219 string Tag = "[" + this.GetType().Name + ":" + System.Reflection.MethodBase.GetCurrentMethod(); //クラス名とメソッド名を自動取得 #pragma warning restore 0219 //RenderTextureが生成されているかチェック if (!renderTexture.IsCreated()) { Debug.Log(Tag + "RenderTextureがまだ生成されていない"); return; } //回転を生成 Quaternion quaternion = Quaternion.Euler(Rotation.x, Rotation.y, Rotation.z); //座標系を変更(右手系と左手系の入れ替え) Vector3 position = Position; position.z = -Position.z; //HMD視点位置変換行列に書き込む。 Matrix4x4 m = Matrix4x4.TRS(position, quaternion, Scale); //鏡像反転 Vector3 Mirroring = new Vector3(MirrorX ? -1 : 1, MirrorY ? -1 : 1, 1); //4x4行列を3x4行列に変換する。 p.m0 = Mirroring.x * m.m00; p.m1 = Mirroring.y * m.m01; p.m2 = Mirroring.z * m.m02; p.m3 = m.m03; p.m4 = Mirroring.x * m.m10; p.m5 = Mirroring.y * m.m11; p.m6 = Mirroring.z * m.m12; p.m7 = m.m13; p.m8 = Mirroring.x * m.m20; p.m9 = Mirroring.y * m.m21; p.m10 = Mirroring.z * m.m22; p.m11 = m.m23; //回転行列を元に相対位置で表示 if (DeviceTracking) { //deviceindexを処理(コントローラーなどはその時その時で変わるため) var idx = OpenVR.k_unTrackedDeviceIndex_Hmd; switch (DeviceIndex) { case TrackingDeviceSelect.LeftController: idx = openvr.GetTrackedDeviceIndexForControllerRole(ETrackedControllerRole.LeftHand); break; case TrackingDeviceSelect.RightController: idx = openvr.GetTrackedDeviceIndexForControllerRole(ETrackedControllerRole.RightHand); break; default: idx = (uint)DeviceIndex; break; } //device情報に変化があったらInspectorに反映 if (DeviceIndexOld != (int)idx) { Debug.Log(Tag + "Device Updated"); UpdateDeviceInfo(idx); DeviceIndexOld = (int)idx; } //HMDからの相対的な位置にオーバーレイを表示する。 overlay.SetOverlayTransformTrackedDeviceRelative(overlayHandle, idx, ref p); } else { //空間の絶対位置にオーバーレイを表示する if (!Seated) { overlay.SetOverlayTransformAbsolute(overlayHandle, ETrackingUniverseOrigin.TrackingUniverseStanding, ref p); } else { overlay.SetOverlayTransformAbsolute(overlayHandle, ETrackingUniverseOrigin.TrackingUniverseSeated, ref p); } } if (ResetSeatedCamera) { OpenVR.System.ResetSeatedZeroPose(); ResetSeatedCamera = false; } //オーバーレイの大きさ設定(幅のみ。高さはテクスチャの比から自動計算される) overlay.SetOverlayWidthInMeters(overlayHandle, width); //オーバーレイの透明度を設定 overlay.SetOverlayAlpha(overlayHandle, alpha); //マウスカーソルスケールを設定する(これにより表示領域のサイズも決定される) try { HmdVector2_t vecMouseScale = new HmdVector2_t { v0 = renderTexture.width, v1 = renderTexture.height }; overlay.SetOverlayMouseScale(overlayHandle, ref vecMouseScale); } catch (UnassignedReferenceException e) { Debug.LogError(Tag + "RenderTextureがセットされていません " + e.ToString()); ProcessError(); 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); } }
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; } } }