一.屏幕坐标系
1.屏幕坐标系: 手机屏幕或者电脑屏幕的一个坐标系。
2.屏幕坐标是以像素来定义的, 屏幕左下角为原点(0,0), 右上角为(Screen.width,Screen.height), width是屏幕的宽度, height是屏幕的高度, Z值是摄像机世界坐标取反,并且以相机的世界单位来衡量的。
3.屏幕坐标和相机之间满足: Screen.width = Camera.main.pixelWidth和Screen.height = Camera.main.pixelHeight这两个条件。
4.鼠标的位置坐标属于屏幕坐标。通过Input.mousePosition获取鼠标的屏幕坐标。
二.创建工程
1.创建一个游戏工程, 命名为ScreenViewPort

2.在Project视图中创建3个文件夹, Scene文件夹、Resources文件夹和Script文件夹

3.将当前场景保存为GameScene

4.创建ScreenPosition游戏脚本

5.在Hierarchy视图中创建一个空的GameObject, 命名为GameManager,并把ScreenPosition绑定在该对象上

6.更改屏幕分辨率为480 * 800

7.编写代码

using UnityEngine;public class ScreenPosition : MonoBehaviour
{void Update () {if(Input.GetMouseButtonDown(0)){Debug.Log ("屏幕坐标:" + Input.mousePosition);}}
}

8.运行点击屏幕打印

屏幕坐标:(9.0, 33.0, 0.0)

屏幕坐标:(458.0, 22.0, 0.0)

屏幕坐标:(228.0, 410.0, 0.0)

屏幕坐标:(458.0, 795.0, 0.0)

三.视口坐标系

1.摄像机的前面有一个长方形的小框子, 那个即为视口。

2.视口坐标是标准化后的屏幕坐标。视口坐标是以0到1间的数字来表示的, 它的范围是以左下角为(0,0), 右上角为(1,1)定义的这样一个矩形。视口坐标是一个3D坐标, Z轴是以相机的世界单位来衡量的。通过对比可以发现视口坐标和屏幕坐标特别的相似。

3.摄像机视口比例:public float aspect{get;set;},此属性用于获取或设置Camera视口的宽高比例值。

4.void ResetAspect();恢复长宽比为屏幕的长宽比。

5.代码

using UnityEngine;public class CameraAspect : MonoBehaviour
{void Start () {Debug.Log ("默认宽高比例:" + Camera.main.aspect);}void OnGUI () {if(GUILayout.Button("摄像机宽高比例为1")){Camera.main.ResetAspect ();Camera.main.aspect = 1;}if(GUILayout.Button("摄像机宽高比例为2")){Camera.main.ResetAspect ();Camera.main.aspect = 2;}}
}

四.屏幕坐标和视口坐标的转换

1.从视口空间到屏幕空间的变换位置: Vector3 ViewportToScreenPoint(Vector3 position);

2.从屏幕空间到视窗空间的变换位置: Vector3 ScreenToViewportPoint(Vector3 position);

3.代码

using UnityEngine;public class ScreenViewPortPosition : MonoBehaviour
{void Start(){Debug.Log ("摄像机视口坐标转换成屏幕坐标[(0,0,0),"+Camera.main.ViewportToScreenPoint(new Vector3(0,0,0))+"]");Debug.Log ("摄像机视口坐标转换成屏幕坐标[(0.5,0,0),"+Camera.main.ViewportToScreenPoint(new Vector3(0.5f,0,0))+"]");Debug.Log ("摄像机视口坐标转换成屏幕坐标[(0,0.5,0),"+Camera.main.ViewportToScreenPoint(new Vector3(0,0.5f,0))+"]");Debug.Log ("摄像机视口坐标转换成屏幕坐标[(0.5,0.5,0),"+Camera.main.ViewportToScreenPoint(new Vector3(0.5f,0.5f,0))+"]");Debug.Log ("摄像机视口坐标转换成屏幕坐标[(1,0,0),"+Camera.main.ViewportToScreenPoint(new Vector3(1,0,0))+"]");Debug.Log ("摄像机视口坐标转换成屏幕坐标[(0,1,0),"+Camera.main.ViewportToScreenPoint(new Vector3(0,1,0))+"]");Debug.Log ("摄像机视口坐标转换成屏幕坐标[(1,1,0),"+Camera.main.ViewportToScreenPoint(new Vector3(1,1,0))+"]");}void Update () {if(Input.GetMouseButtonDown(0)){Debug.Log ("摄像机屏幕坐标转换成视口坐标:["+Input.mousePosition+","+Camera.main.ScreenToViewportPoint(Input.mousePosition)+"]");}}
}

屏幕坐标系和视口坐标系相关推荐

  1. 【Android 应用开发】Android 组件 位置坐标 属性 ( 组件位置属性 | 父容器坐标系坐标 | 窗口坐标系坐标 | 屏幕坐标系坐标 | 触摸坐标 )

    文章目录 I . View 坐标体系总结 II . View 组件的 left , top , right , bottom 父容器相对位置 III . View 组件的 x , y , transl ...

  2. 图形学笔记(五)光栅化——屏幕、像素、屏幕空间、视口变换、基础图元与三角形、采样、包围盒、锯齿或走样

    图形学笔记(四)变换--三维变换(三维旋转与欧拉角).MVP变换.视图变换.投影变换(正交投影与透视投影) 图形学笔记(六)光栅化2 -- Artifacts.时域与频域.滤波.卷积定理.超采样.MS ...

  3. 2.cocos2d-x坐标体系(UI坐标系,GL坐标系,本地坐标,世界坐标,节点坐标)

     openGL & UI坐标体系 OpenGL坐标系:该坐标原点在屏幕左下角,x轴向右,y轴向上.这也就是cocos2dx中用到的坐标系. 屏幕坐标系:该坐标系的原点在屏幕左上角,x轴向右 ...

  4. android motionevent 坐标,Android坐标系、视图坐标系与触控事件(MotionEvent)

    前言:本篇文章讲解Android坐标系.视图坐标系与触控事件(MotionEvent) 一. Android 的坐标系:#### 在Android中,将屏幕左上角的定点座位Android坐标系的原点, ...

  5. 【自动驾驶】16.计算机视觉:相机成像原理:世界坐标系、相机坐标系、图像坐标系、像素坐标系之间的转换

    本篇博客为转载,我对其中的细节添加了一些说明. 原文链接:https://blog.csdn.net/chentravelling/article/details/53558096 0.前言 最近整理 ...

  6. 世界坐标系,相机坐标系和图像坐标系的转换(Python)

    世界坐标系,相机坐标系和图像坐标系的转换(Python) 相机内参外参说明:相机内参外参_pan_jinquan的博客-CSDN博客_相机内参 计算机视觉:相机成像原理:世界坐标系.相机坐标系.图像坐 ...

  7. 单目视觉标定:世界坐标系、相机坐标系、图像坐标系、像素坐标系——简单粗暴,粗暴

    转:https://blog.csdn.net/chentravelling/article/details/53558096 1.正文 图像处理.立体视觉等等方向常常涉及到四个坐标系:世界坐标系.相 ...

  8. 世界坐标系,摄像机坐标系、图像坐标系关系汇总

    **摄像机标定:**在计算机视觉研究领域,摄像机标定是一个重要的环节.摄像机标定就是求取摄像机内外参数的过程. 世界坐标系:绝对坐标系,一般的三维场景都由这个坐标系来表示.摄像机可以放置在环境中的任何 ...

  9. 我国四大常用坐标系及高程坐标系【转载】

    1.北京54坐标系(BJZ54) 北京54坐标系为参心大地坐标系,大地上的一点可用经度L54.纬度M54和大地高H54定位,它是以克拉索夫斯基椭球为基础,经局部平差后产生的坐标系. 新中国成立以后,我 ...

最新文章

  1. .net 文件服务器系统,File-service基于ASP.NET Core的可伸缩、通用的文件服务器
  2. linux普通文件的特点是,linux系统文件系统上有哪些特点
  3. StackGAN mini review
  4. 高性能、低成本的高防 IP 产品能现实吗?
  5. iOS根据图片url获取尺寸
  6. 递归算法(一)递归概念与思路
  7. win7计算机管理找不到文件夹,Win7系统打开组策略提示找不到文件gpedit.msc怎么办...
  8. sap 订单状态修改时间_SAP中对于获取订单的状态
  9. WPF使用Canvas绘制可变矩形
  10. 反病毒软件技术简析与探索(2009年5月18日)
  11. GNU ARM 汇编基础笔记
  12. RTX3060(30系显卡)Windows10部署Pytorch深度学习环境步骤与心得
  13. Kyrie Irving邀请粉丝加入Lineage Logistics的Share A Meal运动,帮助受COVID-19疫情影响的人们
  14. Keil MDK使用编译器AC5与AC6生成浏览信息的差异
  15. 2022-7-27 顾宇佳 学习笔记
  16. uni-app h5 使用微信JSSDK的方式
  17. 10款可视化大屏特效,酷炫又内涵!
  18. Kvaser Android驱动程序已经在许多应用程序中得到了成功的应用
  19. 杭电计算机学院2019年奖学金,关于计算机学院2019-2020学年国家励志奖学金评选的通知...
  20. 关于我自己 a propos de moi

热门文章

  1. 为什么站点实现了https加密之后还是能看到相关数据
  2. openStack使用宿主机监控
  3. SQL CROSS JOIN
  4. 设计模式-建造者模式(转自:http://www.cnblogs.com/cbf4life/archive/2010/01/14/1647710.html)...
  5. HDU4007 Dave [杂题]
  6. 你的云计算到底有多安全?
  7. VS2013安装OpenCV4.1版本并搭建一个小程序
  8. 错误:java.lang.ClassNotFoundException:org.apache.commons.fileupload.FileItemFactory 解决方案...
  9. .NET MongoDB Driver 2.2使用示例
  10. Centos下安装Mysql