世界坐标系就是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之世界坐标系,屏幕坐标系,视口坐标系,如何获取物体距离摄像机的距离的更多相关文章

  1. Android之获取屏幕的尺寸像素及获取状态栏标题栏高度

    在Android的实际开发中,会经常用到获取屏幕的尺寸的问题,以便设置一些布局在屏幕上的固定位置,从而适配各个屏幕的设备. 今天我就来讲一下怎么得到当前设备的屏幕像素吧: 一.在Activity中: ...

  2. 17.在自适应屏幕里通过JQ来获取宽高并赋给需要的

    在自适应屏幕里通过JQ来获取宽高并赋给需要的div. var height = document.documentElement.clientHeight; $(window).height();(同 ...

  3. android 获取屏幕的高度和宽度、获取控件在屏幕中的位置、获取屏幕中控件的高度和宽度

    (一)获取屏幕的高度和宽度 有两种方法: 方法1: WindowManager wm = (WindowManager) getContext().getSystemService(Context.W ...

  4. JS 中屏幕、浏览器和文档的高度、宽度和距离

    1.各种对象 window.screen - 屏幕,window - 窗口,document.documentElement & document.body.parentNode - 文档,d ...

  5. 获取Android 手机屏幕宽度和高度以及获取Android手机序列号

    1.获取Android 手机屏幕宽度 1 DisplayMetrics dm = new DisplayMetrics(); 2 this.getWindowManager().getDefaultD ...

  6. Unity3D研究院之获取摄像机的视口区域

    摄像机分为两种,一种是正交摄像机还有一种是透视摄像机.正交摄像机无论远近它的视口范围永远是固定的,但是透视摄像机是由原点向外扩散性发射,也就是距离越远它的视口区域也就越大.那么我们如何获取距离摄像机任 ...

  7. 移动平台Unity3D 应用性能优化

    WeTest 导读 做了大概半年多VR应用了,VR由于双眼double渲染的原因,对性能的优化要求比较高,在项目的进展过程中,总结了一些关于移动平台上Unity3D的性能优化经验,供分享. 一.移动平 ...

  8. Unity API 解析 (陈泉宏著)

    1 Application类 2 Camera类 3 GameObject类 4 HideFlags类 5 Mathf类 6 Matrix4x4类 7 Object类 8 Quaternion类 9 ...

  9. 图形与游戏中3D数学基础的说明

    1.左手坐标系与右手坐标系没有好坏之分,不同的研究领域和不同的背景下,选择不同的坐标系:传统计算机图形学采用“左手坐标系”,线性代数则倾向于使用右手坐标系 坐标系由坐标轴与坐标原点组成.原点定义坐标系 ...

随机推荐

  1. Python中的列表生成器,迭代器的理解

    首先,思考一个问题,比如,我们想生成0-100的列表,我们怎么做? 当然,可以写成 list1=[1,2,3...,100] 可以看出,这种方法不适合生成长的列表,那么Python中就可以利用已有的列 ...

  2. Swift Runtime ?

    你肯定也想过 在OC中相信每一个iOS开发都知道Runtime, 现在Swift也更新到4.0版本了,要是你也学习过Swift的话你可能也会想过这样一个问题,OC大家都是到是有动态性的,你能通过run ...

  3. TCP/IP协议栈 ARP和RARP协议

    上几章中我们提到以太网协议中,在以太网首部中一个帧类型的字段,它可以表示为IP ARP RARP协议. 这里说一下ARP 和RARP协议. 首先看ARP协议: 要想网络中的数据包准确到达某个主机,最后 ...

  4. leetcode算法题1: 两个二进制数有多少位不相同?异或、位移、与运算的主场

    /* The Hamming distance between two integers is the number of positions at which the corresponding b ...

  5. 天梯赛 L3-013 非常弹的球 找规律

    L3-013. 非常弹的球 时间限制 100 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 俞勇(上海交通大学) 刚上高一的森森为了学好物理,买了一个 ...

  6. PHP根据传入参数合并多个JS和CSS文件的简单实现

    HTML(使用方法): 复制代码代码如下: <link rel="stylesheet" type="text/css" href="cssmi ...

  7. git操作之上传gitthub

    push 失败解决方法: 分支操作: 分支操作之覆盖: 主master操作:

  8. 4、C#基础 - C# 的 常见概念简述

    在上篇文章中,你跟着我写了一个HelloWorld,本篇中,我们来谈谈一些C#程序中的小概念 1.C# 程序结构 一个 C# 程序主要包括以下部分: 命名空间声明(Namespace declarat ...

  9. html标签对应的英文原文 - 司徒正美

    标签 对应英文 说明 <!--> / 注释 <!DOCTYPE> document type 文档类型 <a> anchor 超链接 <abbr> ab ...

  10. Java内存模型—JMM

     有时候编译器.处理器的优化会导致runtime与我们设想的不一样,为此Java对编译器和处理器做了一些限制,JAVA内存模型(JMM)将这些抽象出来,这样编写代码时就无需考虑那么多底层细节,并保证& ...