zoukankan      html  css  js  c++  java
  • 获取相机不同距离的视口矩形

    using UnityEngine;
    using System.Collections;
     
    public class CameraView : MonoBehaviour {
    	
    	
    	private Camera theCamera;
     
            //距离摄像机8.5米 用黄色表示
    	public float upperDistance = 8.5f;
    	//距离摄像机12米 用红色表示
    	public float lowerDistance = 12.0f;
    	
    	private Transform tx;
    	
    	
    	void  Start (){
    		if ( !theCamera )
    		{
    			theCamera = Camera.main;
    		}
    		tx = theCamera.transform;
    	}
    	
    	
    	void  Update (){
    		FindUpperCorners();
    		FindLowerCorners();
    	}
    	
    	
    	void  FindUpperCorners (){
    		Vector3[] corners = GetCorners( upperDistance );
    		
    		// for debugging
    		Debug.DrawLine( corners[0], corners[1], Color.yellow ); // UpperLeft -> UpperRight
    		Debug.DrawLine( corners[1], corners[3], Color.yellow ); // UpperRight -> LowerRight
    		Debug.DrawLine( corners[3], corners[2], Color.yellow ); // LowerRight -> LowerLeft
    		Debug.DrawLine( corners[2], corners[0], Color.yellow ); // LowerLeft -> UpperLeft
    	}
    	
    	
    	void  FindLowerCorners (){
    		Vector3[] corners = GetCorners( lowerDistance );
    		
    		// for debugging
    		Debug.DrawLine( corners[0], corners[1], Color.red );
    		Debug.DrawLine( corners[1], corners[3], Color.red );
    		Debug.DrawLine( corners[3], corners[2], Color.red );
    		Debug.DrawLine( corners[2], corners[0], Color.red );
    	}
    	
    	
    	Vector3[] GetCorners (  float distance   ){
    		Vector3[] corners = new Vector3[ 4 ];
    		
    		float halfFOV = ( theCamera.fieldOfView * 0.5f ) * Mathf.Deg2Rad;
    		float aspect = theCamera.aspect;
    		
    		float height = distance * Mathf.Tan( halfFOV );
    		float width = height * aspect;
    		
    		// UpperLeft
    		corners[ 0 ] = tx.position - ( tx.right * width );
    		corners[ 0 ] += tx.up * height;
    		corners[ 0 ] += tx.forward * distance;
    		
    		// UpperRight
    		corners[ 1 ] = tx.position + ( tx.right * width );
    		corners[ 1 ] += tx.up * height;
    		corners[ 1 ] += tx.forward * distance;
    		
    		// LowerLeft
    		corners[ 2 ] = tx.position - ( tx.right * width );
    		corners[ 2 ] -= tx.up * height;
    		corners[ 2 ] += tx.forward * distance;
    		
    		// LowerRight
    		corners[ 3 ] = tx.position + ( tx.right * width );
    		corners[ 3 ] -= tx.up * height;
    		corners[ 3 ] += tx.forward * distance;
    		
    		return corners;
    	}
    }
    
  • 相关阅读:
    sklearn的train_test_split函数
    Tensorflow报错:InvalidArgumentError: You must feed a value for placeholder tensor 'input_y' with dtype
    conda install 安装太慢怎么办?
    python merge、concat合并数据集
    如何调用写好的指定模块?——sys.path
    对分类特征做编码
    ThreadPoolExecutor的创建
    MYSQL中VARCHAR长度怎么选?
    JAVA实现一个低性能的WEB服务器(一)——线程池
    在连接校园网的同时连接外网|同时访问内网与外网
  • 原文地址:https://www.cnblogs.com/kingBook/p/11326674.html
Copyright © 2011-2022 走看看