Unity引擎时非常成熟的,引擎内部运用了很多的数学知识,他对开发者来说是不可见的,而且他已经封装好的算法也不是很全面。此外,要是使用引擎封装好的算法也要明白其实现的原理。

写过一些代码,也参考了一些博客,书籍,想就此记录总结一下的自己所学到的东西,也给大家分享一下。

而我主要想从这五个方面来简要说说,分别是Unity坐标系,向量,矩阵,四元数,欧拉角。这篇先来介绍第一个。

  在介绍Unity的坐标系钱,我想先谈谈3D坐标系,表示的是三维空间,它存在着三个坐标轴,分别是X轴,Y轴,Z轴。3D坐标系分为左手坐标系和右手坐标系。左手坐标系就是Y轴指上方,X轴指向右方,而Z轴指向前方;而右手坐标系和左手坐标系的X轴和Y轴志向相同,Z轴的方向正好相反。便于理解:大拇指指向的方向就是Z轴的方向,四指弯曲的方向就是从X轴到Y轴的方向,左右手都可以这样判断。

  (1)世界坐标(World Space)

  Unity引擎的左手坐标系也被称为世界坐标系,在默认情况下,局部坐标和世界坐标系的原点是重合的,不能把所有的模型都叠加在世界坐标系的原点上,因此需要移动模型。模型移动式就会发生模型的局部坐标到世界坐标的转换,这个移动的过程就是把模型的局部坐标转化成世界坐标。知识这个转化的过程是在引擎编辑器内部实现的,实际上就是将模型的各个点与世界矩阵相乘得到。

  X轴:左负右正;Y轴:上正下负;Z轴:里正外负。

  transform.position就是获取到当前物体的世界坐标的位置。

  transform.localPosition获取的是当前模型的局部坐标。

  (2)屏幕坐标(Screen Space)

  Unity开发的移动端手游经常会用到屏幕坐标系,屏幕坐标是就是通常使用的电脑屏幕,它是以像素为单位的,屏幕左下角(0,0)点,右上角为(Screen.Width,Screen.Height)点,Z的位置是根据相机的Z缓存值确定的。通常使用鼠标在屏幕上单机物体,它就是屏幕坐标。通过Input.mousePosition可以获得鼠标位置的坐标。对虚拟摇杆的滑动可以通过Input.GetTouch(0),position获取到手指触碰屏幕的坐标。对UI的操作以及单机3D物体发射射线判断是否选中物体也是基于屏幕坐标系的。

  (3)相机坐标(ViewPort Space)

  通过相机才能看到虚拟世界的物体。相机有自己的适口坐标,物体要转换到视口坐标才能被看到。相机的视口左下角为(0,0)点,右上角为(1,1)点,Z的位置是以相机的世界单位来衡量的。(0,0)点和(1,1)点是通过公式进行缩放计算的。

  (4)坐标转换

  获取物体位置的通常写法是transform.position,它表示的时立方体在3D世界中的世界坐标的位置。如果使用的是触摸屏幕,那么可以通过函数Input.GetTouch(0).position获取到屏幕坐标系。

  世界坐标和本地坐标可以直接从position和localPosition中获取;

  世界坐标到屏幕坐标的转化:camera.WorldToScreenPoint(transform.position);

  世界坐标到视口坐标的转化:camera.WorldToViewportPoint(obj.transform.position);

  屏幕坐标到视口坐标的转化:camera.ScreenToViewportPoint(Input.GetTouch(0).position);

  视口坐标到世界坐标的转化:camera.ViewportToWorldPoint(0.2f,0.3f,0);

  视口坐标到屏幕坐标的转化:camera.ViewportToScreenPoint(0.2f,0.3f,0);

  

3D数学基础(一)Unity坐标系的更多相关文章

  1. 3D数学基础:四元数与欧拉角之间的转换

    在3D图形学中,最常用的旋转表示方法便是四元数和欧拉角,比起矩阵来具有节省存储空间和方便插值的优点.本文主要归纳了两种表达方式的转换,计算公式采用3D笛卡尔坐标系: 单位四元数可视化为三维矢量加上第四 ...

  2. 3D数学基础 KeyNote 1

    [计算几何复习要点] 1.向量加法的几何含意: a+b的释意为:a的尾连上b的头,新建一条从a的尾指向b的头的向量. 2.向量减法的几何含意: a-b的释意为:尾部相连,新建一个从b的头指向a的头的向 ...

  3. Unity 3D 的四种坐标系

    1, World Space(世界坐标): 我们在场景中添加物体(如:Cube),他们都是以世界坐标显示在场景中的.transform.position可以获得该位置坐标. 2, Screen Spa ...

  4. [Unity] 3D数学基础 - 2D旋转矩阵

    2D矩阵的旋转: NewX = X * Cos(α) - Y * Sin(α) NewY = X * Sin(α) + Y * Cos(α) 一般在三角函数中使用的是弧度,我们可以通过下面的公式将角度 ...

  5. 3D数学基础(三)矩阵

    3D引擎中对于矩阵的使用非常多,介绍这些知识也是为了告诉开发者原理,更有助于开发者编写逻辑. (1)固定流水线 各种坐标系之间的转化是通过矩阵相乘得到的,这里面就涉及到了3D固定流水线.作为3D游戏开 ...

  6. 3D数学基础_图形与游戏开发

    https://blog.csdn.net/popy007/article/list/2?t=1&  //向量计算相关文章 https://www.baidu.com/link?url=48C ...

  7. Unity 坐标系转换

    在Unity中我们通常会用到以下几个坐标系下的点: 世界坐标系:World Space 简单来讲,我们通过 transform.position | transform.rotation 获取得到的位 ...

  8. Unity坐标系入门

    一.坐标系的概念 Unity 世界坐标系采用左手坐标系,大拇指指向X轴(红色),食指指向Y轴(黄色),中指向手心方向歪曲90度表示Z轴(蓝色),同时Z轴也是物体前进方向,下图表示Unity的四种坐标系 ...

  9. Unity 坐标系

    Unity 使用的是左手坐标系

随机推荐

  1. Django介绍

    diango介绍 web框架介绍 web框架: Web应用框架(Web application framework)是一种开发框架,用来支持动态网站.网络应用程序及网络服务的开发.其类型有基于请求的和 ...

  2. 【分享】JS如何为复制的Web文本添加其他信息

    看到了两篇关于这题的讨论,简单的记录一下!o(* ̄▽ ̄*)ブ 1.  stackoverflow , How to add extra info to copied web text 2.  黑客派, ...

  3. nginx 出现504 Gateway Time-out的解决方法

    本文介绍nginx出现504 Gateway Time-out问题的原因,分析问题并提供解决方法. 1.问题分析nginx访问出现504 Gateway Time-out,一般是由于程序执行时间过长导 ...

  4. dockerfile语法规则

    编写Dockerfile 在前面的章节,我们学习了通过docker命令来下载镜像,运行镜像,在容器中部署自己的程序,最后将容器提交到自己的镜像中.但是,这并不是Docker推荐的镜像构建方式.在这一章 ...

  5. day47-python爬虫学习二

    2.Request的会话对象 s = requests.session() Python2 S = requests.Session() 所有一次会话的信息都保存在s中,只需要对s进行操作就可以了. ...

  6. 清除冗余的css

    下载旧版的火狐浏览器,如Firefox 48.0.exe, 下载地址:https://ftp.mozilla.org/pub/firefox/releases/48.0/win32/zh-CN 关闭更 ...

  7. centos7搭建日志服务器

    服务器端 修改配置文件 /etc/rsyslog.conf中 $ModLoad imudp $UDPServerRun 514 打开日志服务监听 修改/etc/sysconfig/rsyslog文件 ...

  8. JS案例五:设置全选、全不选以及反选

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  9. winfrom窗体中嵌套WPF控件

    前言 本文主要介绍如何在winfrom窗体中嵌套WPF控件, 一来是自己记录一下,而来希望能对有需要的朋友提供实现思路. 如有错误请指出...下面进入正题... -1.前期准备 准备一个建立好的win ...

  10. FreeType使用的总结

    http://www.cppblog.com/liangairan/archive/2016/09/11/214270.html 这里说一下Freetype的关键点,比较基础的在很多文章已经有说明,这 ...