You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			86 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			C#
		
	
			
		
		
	
	
			86 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			C#
		
	
//======= Copyright (c) Valve Corporation, All rights reserved. ===============
 | 
						|
using UnityEngine;
 | 
						|
 | 
						|
namespace Valve.VR.Extras
 | 
						|
{
 | 
						|
    public class SteamVR_TestTrackedCamera : MonoBehaviour
 | 
						|
    {
 | 
						|
        public Material material;
 | 
						|
        public Transform target;
 | 
						|
        public bool undistorted = true;
 | 
						|
        public bool cropped = true;
 | 
						|
 | 
						|
        private void OnEnable()
 | 
						|
        {
 | 
						|
            // The video stream must be symmetrically acquired and released in
 | 
						|
            // order to properly disable the stream once there are no consumers.
 | 
						|
            SteamVR_TrackedCamera.VideoStreamTexture source = SteamVR_TrackedCamera.Source(undistorted);
 | 
						|
            source.Acquire();
 | 
						|
 | 
						|
            // Auto-disable if no camera is present.
 | 
						|
            if (!source.hasCamera)
 | 
						|
                enabled = false;
 | 
						|
        }
 | 
						|
 | 
						|
        private void OnDisable()
 | 
						|
        {
 | 
						|
            // Clear the texture when no longer active.
 | 
						|
            material.mainTexture = null;
 | 
						|
 | 
						|
            // The video stream must be symmetrically acquired and released in
 | 
						|
            // order to properly disable the stream once there are no consumers.
 | 
						|
            SteamVR_TrackedCamera.VideoStreamTexture source = SteamVR_TrackedCamera.Source(undistorted);
 | 
						|
            source.Release();
 | 
						|
        }
 | 
						|
 | 
						|
        private void Update()
 | 
						|
        {
 | 
						|
            SteamVR_TrackedCamera.VideoStreamTexture source = SteamVR_TrackedCamera.Source(undistorted);
 | 
						|
            Texture2D texture = source.texture;
 | 
						|
            if (texture == null)
 | 
						|
            {
 | 
						|
                return;
 | 
						|
            }
 | 
						|
 | 
						|
            // Apply the latest texture to the material.  This must be performed
 | 
						|
            // every frame since the underlying texture is actually part of a ring
 | 
						|
            // buffer which is updated in lock-step with its associated pose.
 | 
						|
            // (You actually really only need to call any of the accessors which
 | 
						|
            // internally call Update on the SteamVR_TrackedCamera.VideoStreamTexture).
 | 
						|
            material.mainTexture = texture;
 | 
						|
 | 
						|
            // Adjust the height of the quad based on the aspect to keep the texels square.
 | 
						|
            float aspect = (float)texture.width / texture.height;
 | 
						|
 | 
						|
            // The undistorted video feed has 'bad' areas near the edges where the original
 | 
						|
            // square texture feed is stretched to undo the fisheye from the lens.
 | 
						|
            // Therefore, you'll want to crop it to the specified frameBounds to remove this.
 | 
						|
            if (cropped)
 | 
						|
            {
 | 
						|
                VRTextureBounds_t bounds = source.frameBounds;
 | 
						|
                material.mainTextureOffset = new Vector2(bounds.uMin, bounds.vMin);
 | 
						|
 | 
						|
                float du = bounds.uMax - bounds.uMin;
 | 
						|
                float dv = bounds.vMax - bounds.vMin;
 | 
						|
                material.mainTextureScale = new Vector2(du, dv);
 | 
						|
 | 
						|
                aspect *= Mathf.Abs(du / dv);
 | 
						|
            }
 | 
						|
            else
 | 
						|
            {
 | 
						|
                material.mainTextureOffset = Vector2.zero;
 | 
						|
                material.mainTextureScale = new Vector2(1, -1);
 | 
						|
            }
 | 
						|
 | 
						|
            target.localScale = new Vector3(1, 1.0f / aspect, 1);
 | 
						|
 | 
						|
            // Apply the pose that this frame was recorded at.
 | 
						|
            if (source.hasTracking)
 | 
						|
            {
 | 
						|
                SteamVR_Utils.RigidTransform rigidTransform = source.transform;
 | 
						|
                target.localPosition = rigidTransform.pos;
 | 
						|
                target.localRotation = rigidTransform.rot;
 | 
						|
            }
 | 
						|
        }
 | 
						|
    }
 | 
						|
} |