コード例 #1
0
ファイル: openvr_api.cs プロジェクト: billcrosbie/openvr
 public abstract void SetWorkingHardBoundsInfo(HmdQuad_t [] pQuadsBuffer);
コード例 #2
0
ファイル: openvr_api.cs プロジェクト: billcrosbie/openvr
 public override void SetWorkingHardBoundsInfo(HmdQuad_t [] pQuadsBuffer)
 {
     CheckIfUsable();
     VRNativeEntrypoints.VR_IVRChaperoneSetup_SetWorkingHardBoundsInfo(m_pVRChaperoneSetup,pQuadsBuffer,(uint) pQuadsBuffer.Length);
 }
コード例 #3
0
ファイル: openvr_api.cs プロジェクト: billcrosbie/openvr
 public abstract bool GetWorkingHardBoundsInfo(out HmdQuad_t [] pQuadsBuffer);
コード例 #4
0
ファイル: openvr_api.cs プロジェクト: bigrpg/openvr
 public abstract bool SetWorkingPhysicalBoundsInfo(HmdQuad_t [] pQuadsBuffer);
コード例 #5
0
ファイル: openvr_api.cs プロジェクト: billcrosbie/openvr
 public override bool GetWorkingHardBoundsInfo(out HmdQuad_t [] pQuadsBuffer)
 {
     CheckIfUsable();
     uint punQuadsCount = 0;
     bool result = VRNativeEntrypoints.VR_IVRChaperoneSetup_GetWorkingHardBoundsInfo(m_pVRChaperoneSetup,null,ref punQuadsCount);
     pQuadsBuffer= new HmdQuad_t[punQuadsCount];
     result = VRNativeEntrypoints.VR_IVRChaperoneSetup_GetWorkingHardBoundsInfo(m_pVRChaperoneSetup,pQuadsBuffer,ref punQuadsCount);
     return result;
 }
コード例 #6
0
ファイル: openvr_api.cs プロジェクト: bigrpg/openvr
 public abstract bool GetWorkingPlayAreaRect(ref HmdQuad_t rect);
コード例 #7
0
ファイル: openvr_api.cs プロジェクト: bigrpg/openvr
 public abstract void SetWorkingCollisionBoundsInfo(HmdQuad_t [] pQuadsBuffer);
コード例 #8
0
ファイル: openvr_api.cs プロジェクト: bigrpg/openvr
 public abstract bool GetLivePhysicalBoundsInfo(out HmdQuad_t [] pQuadsBuffer);
コード例 #9
0
ファイル: openvr_api.cs プロジェクト: bigrpg/openvr
 public abstract bool GetWorkingCollisionBoundsInfo(out HmdQuad_t [] pQuadsBuffer);
コード例 #10
0
ファイル: openvr_api.cs プロジェクト: bigrpg/openvr
 public override bool SetWorkingPhysicalBoundsInfo(HmdQuad_t [] pQuadsBuffer)
 {
     CheckIfUsable();
     bool result = VRNativeEntrypoints.VR_IVRChaperoneSetup_SetWorkingPhysicalBoundsInfo(m_pVRChaperoneSetup,pQuadsBuffer,(uint) pQuadsBuffer.Length);
     return result;
 }
コード例 #11
0
ファイル: openvr_api.cs プロジェクト: bigrpg/openvr
 public override bool GetWorkingPlayAreaRect(ref HmdQuad_t rect)
 {
     CheckIfUsable();
     bool result = VRNativeEntrypoints.VR_IVRChaperoneSetup_GetWorkingPlayAreaRect(m_pVRChaperoneSetup,ref rect);
     return result;
 }
コード例 #12
0
    public void BuildMesh()
    {
        var rect = new HmdQuad_t();

        if (!GetBounds(size, ref rect))
        {
            return;
        }

        var corners = new HmdVector3_t[] { rect.vCorners0, rect.vCorners1, rect.vCorners2, rect.vCorners3 };

        vertices = new Vector3[corners.Length * 2];
        for (int i = 0; i < corners.Length; i++)
        {
            var c = corners[i];
            vertices[i] = new Vector3(c.v0, 0.01f, c.v2);
        }

        if (borderThickness == 0.0f)
        {
            GetComponent <MeshFilter>().mesh = null;
            return;
        }

        for (int i = 0; i < corners.Length; i++)
        {
            int next = (i + 1) % corners.Length;
            int prev = (i + corners.Length - 1) % corners.Length;

            var nextSegment = (vertices[next] - vertices[i]).normalized;
            var prevSegment = (vertices[prev] - vertices[i]).normalized;

            var vert = vertices[i];
            vert += Vector3.Cross(nextSegment, Vector3.up) * borderThickness;
            vert += Vector3.Cross(prevSegment, Vector3.down) * borderThickness;

            vertices[corners.Length + i] = vert;
        }

        var triangles = new int[]
        {
            0, 1, 4,
            1, 5, 4,
            1, 2, 5,
            2, 6, 5,
            2, 3, 6,
            3, 7, 6,
            3, 0, 7,
            0, 4, 7
        };

        var uv = new Vector2[]
        {
            new Vector2(0.0f, 0.0f),
            new Vector2(1.0f, 0.0f),
            new Vector2(0.0f, 0.0f),
            new Vector2(1.0f, 0.0f),
            new Vector2(0.0f, 1.0f),
            new Vector2(1.0f, 1.0f),
            new Vector2(0.0f, 1.0f),
            new Vector2(1.0f, 1.0f)
        };

        var colors = new Color[]
        {
            color,
            color,
            color,
            color,
            new Color(color.r, color.g, color.b, 0.0f),
            new Color(color.r, color.g, color.b, 0.0f),
            new Color(color.r, color.g, color.b, 0.0f),
            new Color(color.r, color.g, color.b, 0.0f)
        };

        var mesh = new Mesh();

        GetComponent <MeshFilter>().mesh = mesh;
        mesh.vertices  = vertices;
        mesh.uv        = uv;
        mesh.colors    = colors;
        mesh.triangles = triangles;

        var renderer = GetComponent <MeshRenderer>();

#if UNITY_EDITOR
        renderer.material = UnityEditor.AssetDatabase.GetBuiltinExtraResource <Material>("Sprites-Default.mat");
#else
        renderer.material = Resources.GetBuiltinResource <Material>("Sprites-Default.mat");
#endif
        renderer.reflectionProbeUsage = UnityEngine.Rendering.ReflectionProbeUsage.Off;
        renderer.shadowCastingMode    = UnityEngine.Rendering.ShadowCastingMode.Off;
        renderer.receiveShadows       = false;
        renderer.lightProbeUsage      = LightProbeUsage.Off;
    }
コード例 #13
0
    // Update is called once per frame
    void Update()
    {
        var       cam      = SteamVR_Render.Top();
        HmdQuad_t areaRect = new HmdQuad_t();

        if (cam && SteamVR_PlayArea.GetBounds(SteamVR_PlayArea.Size.Calibrated, ref areaRect))
        {
            float xNorm = cam.transform.localPosition.x / Mathf.Abs(areaRect.vCorners0.v0) / 2f;
            float zNorm = cam.transform.localPosition.z / Mathf.Abs(areaRect.vCorners0.v2) / 2f;
            //Debug.Log("NORMALIZED POS " + xNorm + "," + zNorm);
            //Debug.Log("Cam pos " + cam.transform.localPosition);
            //Debug.Log("Rect " + PV(areaRect.vCorners0) + " " + PV(areaRect.vCorners1) + " " + PV(areaRect.vCorners2) + " " + PV(areaRect.vCorners3));

            Vector3 camLookFlat = cam.transform.forward;
            camLookFlat.y = 0f;
            camLookFlat   = camLookFlat.normalized * (flipped ? -1f : 1f);

            bool outsideNormalArea = Mathf.Abs(xNorm) > EDGE_THRESHOLD || Mathf.Abs(zNorm) > EDGE_THRESHOLD;
            if (outsideNormalArea)
            {
                if (!startedFade && returnedToCenter)
                {
                    startedFade = true;
                    fadeStarted = Time.time;
                    SteamVR_Fade.Start(Color.black, FADE_OUT_TIME);
                    initialTurnLookDir = camLookFlat;
                    returnedToCenter   = false;
                    Debug.Log("FADE OUT");
                }
            }
            bool lookingOpposite    = Vector3.Dot(initialTurnLookDir, camLookFlat) < -TURN_DOT_THRESH;
            bool lookingOppositeIsh = Vector3.Dot(initialTurnLookDir, camLookFlat) < 0f;
            if (!outsideNormalArea || lookingOpposite)   // looking away
            {
                if (finishedFade)
                {
                    startedFade  = false;
                    finishedFade = false;
                    SteamVR_Fade.Start(Color.clear, FADE_IN_TIME);
                    Debug.Log("FADE IN AND MAYBE FLIP");
                    // don't flip if youre still looking the same way
                    if (lookingOppositeIsh)
                    {
                        Debug.Log("Flipitt");
                        Vector3 localXZ = cam.transform.localPosition * (flipped ? -1f : 1f);
                        localXZ.y           = 0f;
                        transform.position += 2f * localXZ;
                        transform.Rotate(new Vector3(0f, 180f, 0f));
                        flipped = !flipped;
                    }
                }
            }

            if (!outsideNormalArea)
            {
                returnedToCenter = true;
            }

            Debug.Log("camdir " + camLookFlat + " initdir " + initialTurnLookDir + " lookingopp " + lookingOpposite + " ish " + lookingOppositeIsh);
            if (startedFade && Time.time > fadeStarted + FADE_OUT_TIME && !finishedFade)
            {
                finishedFade = true;
            }
        }
        else
        {
            Debug.Log("No area I guess :O cam: " + cam);
        }
    }
コード例 #14
0
	//Construct the cyPIPES tiles
	public void BuildTiles(){

		//OpenVR: Gather actual corners of floor room setup
		var rect = new HmdQuad_t ();
		if (!GetBounds (size, ref rect))
			return;
		var corners = new HmdVector3_t[] { rect.vCorners0, rect.vCorners1, rect.vCorners2, rect.vCorners3 };
		vertices = new Vector3[corners.Length * 2];
		for (int i = 0; i < corners.Length; i++) {
			var c = corners [i];
			vertices [i] = new Vector3 (c.v0, 0.01f, c.v2);
		}

		//Construct new tiles
		if (vertices.Length > 2) {
			//destroy any previous tiles if they exsist
			if (inwardTiles.Count > 2) {
				foreach (string key in inwardTiles.Keys) {
					Destroy (inwardTiles [key]);
				}
				foreach (string key in outwardTiles.Keys) {
					Destroy (outwardTiles [key]);
				}
			}
			
			//Calculate vertices (just the 8 for now)
			List<Vector3> spaceVerts = new List<Vector3> ();
			spaceVerts.Add (vertices [0]);//back bottom right
			spaceVerts.Add (vertices [1]);//back bottom left
			spaceVerts.Add (vertices [2]);//front bottom left
			spaceVerts.Add (vertices [3]);//front bottom right
			spaceVerts.Add (new Vector3 (vertices [0].x, vertices [0].y + volumeHeight, vertices [0].z));//top bottom right
			spaceVerts.Add (new Vector3 (vertices [1].x, vertices [1].y + volumeHeight, vertices [1].z));//top bottom left
			spaceVerts.Add (new Vector3 (vertices [2].x, vertices [2].y + volumeHeight, vertices [2].z));//top bottom left
			spaceVerts.Add (new Vector3 (vertices [3].x, vertices [3].y + volumeHeight, vertices [3].z));//top bottom right

			//Calulate tile sizes
			//For now this will be simply 6 sided and in this order bk,lft,ft,rht,top,btm
			List<float> widths = new List<float> ();
			List<float> heights = new List<float> ();
			widths.Add (Vector3.Distance (spaceVerts [0], spaceVerts [1]));//back
			heights.Add (Vector3.Distance (spaceVerts [0], spaceVerts [4]));//back
			widths.Add (Vector3.Distance (spaceVerts [1], spaceVerts [2]));//left
			heights.Add (Vector3.Distance (spaceVerts [1], spaceVerts [5]));//left
			widths.Add (Vector3.Distance (spaceVerts [2], spaceVerts [3]));//front
			heights.Add (Vector3.Distance (spaceVerts [2], spaceVerts [6]));//front
			widths.Add (Vector3.Distance (spaceVerts [3], spaceVerts [0]));//right
			heights.Add (Vector3.Distance (spaceVerts [3], spaceVerts [7]));//right
			widths.Add (Vector3.Distance (spaceVerts [4], spaceVerts [5]));//top
			heights.Add (Vector3.Distance (spaceVerts [4], spaceVerts [7]));//top
			widths.Add (Vector3.Distance (spaceVerts [0], spaceVerts [1]));//bottom
			heights.Add (Vector3.Distance (spaceVerts [0], spaceVerts [3]));//bottom

			//Calcuateing the center of tracked space
			centerOfTrackedSpace = spaceVerts [0];
			centerOfTrackedSpace = new Vector3 (centerOfTrackedSpace.x - widths [0] / 2, centerOfTrackedSpace.y, centerOfTrackedSpace.z);
			centerOfTrackedSpace = new Vector3 (centerOfTrackedSpace.x, centerOfTrackedSpace.y, centerOfTrackedSpace.z + heights [0] / 2);
			centerOfTrackedSpace = new Vector3 (centerOfTrackedSpace.x, centerOfTrackedSpace.y + volumeHeight / 2, centerOfTrackedSpace.z);
			//GameObject tester = cyPIPEStileBuild.CreateTile (0.2f, 0.2f, "tester", false);
			//tester.transform.parent = gameObject.transform;
			//tester.transform.position = centerOfTrackedSpace;

			//build tiles and place/oriente them and add to active tile list
			//back normal inward
			GameObject backTile = cyPIPEStileBuild.CreateTile (widths [0], heights [0], "backTile", true);
			backTile.transform.parent = gameObject.transform;
			inwardTiles.Add ("backTile", backTile);
			backTile.transform.position = new Vector3 (spaceVerts [0].x - widths [0], spaceVerts [0].y, spaceVerts [0].z);

				//back normal outward
				GameObject backTileOut = cyPIPEStileBuild.CreateTile (widths [0], heights [0], "backTileOut", true);
				backTileOut.transform.parent = gameObject.transform;
				outwardTiles.Add ("backTileOut", backTileOut);
				backTileOut.transform.position = new Vector3 (spaceVerts [0].x, spaceVerts [0].y, spaceVerts [0].z);
				backTileOut.transform.eulerAngles = new Vector3 (0.0f, 180.0f, 0.0f);

			//left normal inward
			GameObject leftTile = cyPIPEStileBuild.CreateTile (widths [1], heights [1], "leftTile", true);
			leftTile.transform.parent = gameObject.transform;
			inwardTiles.Add ("leftTile", leftTile);
			leftTile.transform.position = new Vector3 (spaceVerts [1].x, spaceVerts [1].y, spaceVerts [1].z + widths [1]);
			leftTile.transform.eulerAngles = new Vector3 (0.0f, 90.0f, 0.0f);

				//left normal outward
				GameObject leftTileOut = cyPIPEStileBuild.CreateTile (widths [1], heights [1], "leftTileOut", true);
				leftTileOut.transform.parent = gameObject.transform;
				outwardTiles.Add ("leftTileOut", leftTileOut);
				leftTileOut.transform.position = new Vector3 (spaceVerts [1].x, spaceVerts [1].y, spaceVerts [1].z);
				leftTileOut.transform.eulerAngles = new Vector3 (0.0f, -90.0f, 0.0f);

			//Front normal inward
			GameObject frontTile = cyPIPEStileBuild.CreateTile (widths [2], heights [2], "frontTile", true);
			frontTile.transform.parent = gameObject.transform;
			inwardTiles.Add ("frontTile", frontTile);
			frontTile.transform.position = new Vector3 (spaceVerts [2].x + widths [2], spaceVerts [2].y, spaceVerts [2].z);
			frontTile.transform.eulerAngles = new Vector3 (0.0f, 180.0f, 0.0f);

				//Front normal outward
				GameObject frontTileOut = cyPIPEStileBuild.CreateTile (widths [2], heights [2], "frontTileOut", true);
				frontTileOut.transform.parent = gameObject.transform;
				outwardTiles.Add ("frontTileOut", frontTileOut);
				frontTileOut.transform.position = new Vector3 (spaceVerts [2].x, spaceVerts [2].y, spaceVerts [2].z);
				frontTileOut.transform.eulerAngles = new Vector3 (0.0f, 0.0f, 0.0f);

			//Right normal inward
			GameObject rightTile = cyPIPEStileBuild.CreateTile (widths [3], heights [3], "rightTile", true);
			rightTile.transform.parent = gameObject.transform;
			inwardTiles.Add ("rightTile", rightTile);
			rightTile.transform.position = new Vector3 (spaceVerts [3].x, spaceVerts [3].y, spaceVerts [3].z - widths [3]);
			rightTile.transform.eulerAngles = new Vector3 (0.0f, -90.0f, 0.0f);

				//Right normal outward
				GameObject rightTileOut = cyPIPEStileBuild.CreateTile (widths [3], heights [3], "rightTileOut", true);
				rightTileOut.transform.parent = gameObject.transform;
				outwardTiles.Add ("rightTileOut", rightTileOut);
				rightTileOut.transform.position = new Vector3 (spaceVerts [3].x, spaceVerts [3].y, spaceVerts [3].z);
				rightTileOut.transform.eulerAngles = new Vector3 (0.0f, 90.0f, 0.0f);

			//top normal inward
			GameObject topTile = cyPIPEStileBuild.CreateTile (widths [4], heights [4], "topTile", true);
			topTile.transform.parent = gameObject.transform;
			inwardTiles.Add ("topTile", topTile);
			topTile.transform.position = new Vector3 (spaceVerts [4].x - widths [4], spaceVerts [4].y, spaceVerts [4].z);
			topTile.transform.eulerAngles = new Vector3 (90.0f, 0.0f, 0.0f);

				//top normal outward
				GameObject topTileOut = cyPIPEStileBuild.CreateTile (widths [4], heights [4], "topTileOut", true);
				topTileOut.transform.parent = gameObject.transform;
				outwardTiles.Add ("topTileOut", topTileOut);
				topTileOut.transform.position = new Vector3 (spaceVerts [4].x - widths [4], spaceVerts [4].y, spaceVerts [4].z + heights [4]);
				topTileOut.transform.eulerAngles = new Vector3 (-90.0f, 0.0f, 0.0f);

			//bottom normal inward
			GameObject bottomTile = cyPIPEStileBuild.CreateTile (widths [5], heights [5], "bottomTile", true);
			bottomTile.transform.parent = gameObject.transform;
			inwardTiles.Add ("bottomTile", bottomTile);
			bottomTile.transform.position = new Vector3 (spaceVerts [5].x, spaceVerts [5].y - volumeHeight, spaceVerts [5].z * -1);
			bottomTile.transform.eulerAngles = new Vector3 (-90.0f, 0.0f, 0.0f);

				//bottom normal outward
				GameObject bottomTileOut = cyPIPEStileBuild.CreateTile (widths [5], heights [5], "bottomTileOut", true);
				bottomTileOut.transform.parent = gameObject.transform;
				outwardTiles.Add ("bottomTileOut", bottomTileOut);
				bottomTileOut.transform.position = new Vector3 (spaceVerts [5].x, spaceVerts [5].y - volumeHeight, spaceVerts [5].z);
				bottomTileOut.transform.eulerAngles = new Vector3 (90.0f, 0.0f, 0.0f);

			//Signal that all tiles are parsed
			tilesParsed = true;
		}
	}