u3d之世界坐标系,屏幕坐标系,视口坐标系,如何获取物体距离摄像机的距离
世界坐标系就是unity的左手坐标系
屏幕坐标系是Game视图相机拍摄的场景坐标系,左下角(0,0),右上角(Screen.width,Screen.height),单位是像素。Z的位置是以相机的世界单位来衡量的,很多介绍都对Z一笔带过,
后面重点讲一下这个Z的含义,也就是物体距离摄像机的“距离”。
视口坐标系是将Game视图的屏幕坐标系单位化,左下角(0,0),右上角(1,1)
验证如下:
创建一个cube,和一个相机,为相机挂上脚本CameraConvert.cs
using UnityEngine; public class CameraConvert : MonoBehaviour { public Transform target;
Camera camera; void Start()
{
camera = GetComponent<Camera>(); Vector3 worldPos1 = target.position;
Vector3 screenPos = camera.WorldToScreenPoint(worldPos1);
Vector3 worldPos2 = camera.ScreenToWorldPoint(screenPos); //世界坐标系与屏幕坐标系相互转换
Debug.Log("Screen.width" + Screen.width);
Debug.Log("Screen.height" + Screen.height);
Debug.Log("target world pos1 is" + worldPos1);
Debug.Log("target screen Pos is " + screenPos);
Debug.Log("target world pos2 is" + worldPos2); //视口坐标系(x,y范围0-1)
Debug.Log(screenPos.x / Screen.width + " " + screenPos.y / Screen.height);
Debug.Log("target viewpoint Pos1 is" + camera.WorldToViewportPoint(worldPos1));
Debug.Log("target viewpoint Pos2 is " + camera.ScreenToViewportPoint(screenPos));
} }
其中 screenPos的Z坐标表示目标点据相机平面的垂直距离,这个相机平面可以这样确定,1.与nearPlane平面平行,过相机位置点。可以通过以下代码求得:
//计算Z的辅助平面
Plane plane1 = new Plane(transform.forward,transform.position); float distance = plane1.GetDistanceToPoint (target.position);
Debug.Log ("distance:" + distance);
另,可以看下这篇博客。
u3d之世界坐标系,屏幕坐标系,视口坐标系,如何获取物体距离摄像机的距离的更多相关文章
- Android之获取屏幕的尺寸像素及获取状态栏标题栏高度
在Android的实际开发中,会经常用到获取屏幕的尺寸的问题,以便设置一些布局在屏幕上的固定位置,从而适配各个屏幕的设备. 今天我就来讲一下怎么得到当前设备的屏幕像素吧: 一.在Activity中: ...
- 17.在自适应屏幕里通过JQ来获取宽高并赋给需要的
在自适应屏幕里通过JQ来获取宽高并赋给需要的div. var height = document.documentElement.clientHeight; $(window).height();(同 ...
- android 获取屏幕的高度和宽度、获取控件在屏幕中的位置、获取屏幕中控件的高度和宽度
(一)获取屏幕的高度和宽度 有两种方法: 方法1: WindowManager wm = (WindowManager) getContext().getSystemService(Context.W ...
- JS 中屏幕、浏览器和文档的高度、宽度和距离
1.各种对象 window.screen - 屏幕,window - 窗口,document.documentElement & document.body.parentNode - 文档,d ...
- 获取Android 手机屏幕宽度和高度以及获取Android手机序列号
1.获取Android 手机屏幕宽度 1 DisplayMetrics dm = new DisplayMetrics(); 2 this.getWindowManager().getDefaultD ...
- Unity3D研究院之获取摄像机的视口区域
摄像机分为两种,一种是正交摄像机还有一种是透视摄像机.正交摄像机无论远近它的视口范围永远是固定的,但是透视摄像机是由原点向外扩散性发射,也就是距离越远它的视口区域也就越大.那么我们如何获取距离摄像机任 ...
- 移动平台Unity3D 应用性能优化
WeTest 导读 做了大概半年多VR应用了,VR由于双眼double渲染的原因,对性能的优化要求比较高,在项目的进展过程中,总结了一些关于移动平台上Unity3D的性能优化经验,供分享. 一.移动平 ...
- Unity API 解析 (陈泉宏著)
1 Application类 2 Camera类 3 GameObject类 4 HideFlags类 5 Mathf类 6 Matrix4x4类 7 Object类 8 Quaternion类 9 ...
- 图形与游戏中3D数学基础的说明
1.左手坐标系与右手坐标系没有好坏之分,不同的研究领域和不同的背景下,选择不同的坐标系:传统计算机图形学采用“左手坐标系”,线性代数则倾向于使用右手坐标系 坐标系由坐标轴与坐标原点组成.原点定义坐标系 ...
随机推荐
- Python中的冒泡排序
冒泡排序 冒泡排序(英语:Bubble Sort)是一种简单的排序算法.它重复地遍历要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来.遍历数列的工作是重复地进行直到没有再需要交换,也 ...
- postgres 9.5 FDW变化
9.5主要是2个方法有变动: create_foreignscan_path extern ForeignPath *create_foreignscan_path(PlannerInfo *root ...
- eclipse导入新项目后,运行时找不到主类解决办法
最近在学习多线程,今天下了一套源码,导入到eclipse里后,随便找了个带main()的类试了一下,找不到主类. 首先想到的解决办法是把工程clean一下,并没有用.去网上找了一个遍终于找到了管用的方 ...
- Python的用户交互程序及格式化输出
1. 用户输入 在Python 3 中,用户输入用input()函数即可实现用户交互程序. 例如,我们根据程序提示输入用户名和密码,并且打印输入的信息. 2. 字符串格式化输出 例如,我们根据程序提 ...
- 解析XML文件之使用SAM解析器
XML是一种常见的传输数据方式,所以在开发中,我们会遇到对XML文件进行解析的时候,本篇主要介绍使用SAM解析器,对XML文件进行解析. SAX解析器的长处是显而易见的.那就是SAX并不须要将全部的文 ...
- Android酷炫有用的开源框架
一.代码库 1.from 代码家 整理比較好的源代码连接 一.兼容类库 ActionBarSherlock : Action Bar是Android 3.0后才開始支持的,ActionBarSher ...
- Django项目实践4 - Django网站管理(后台管理员)
http://blog.csdn.net/pipisorry/article/details/45079751 上篇:Django项目实践3 - Django模型 Introduction 对于某一类 ...
- CoordinatorLayout与滚动的处理
本博文专门解说和CoordinatorLayout相关的知识点,这也是Design Support Library中最重要与最难的部分. 概览 CoordinatorLayout实现了多种Materi ...
- spool命令、创建一个表,创建而且copy表,查看别的用户下的表,rowid行地址 索引的时候使用,表的增删改查,删除表,oracle的回收站
1.spool命令 spool "D:\test.txt" spool off SQL> host cls 2.创建一个表 SQL> --条件(1):有创建 ...
- CI环境配置
CI:php的MVC框架M(模型model):与数据库打交道的,一般情况下数据库里面的一张表对应一个Model,在里面对应该表的增删改查的操作V(视图view):用户看到的界面,其中很多数据是从数据库 ...