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. git连接不上远程仓库---visualstudio提交代码报错:no upstream configured for branch 'master'

    1,新建文件夹,在文件下下鼠标右键git bush--->git init,初始化仓库: 2,设置gitthub仓库地址:git remote add origin https://github ...

  2. react-redux中的数据传递

    1.connect connect用于连接React组件与 Redux store,其使用方法如下 connect([mapStateToProps], [mapDispatchToProps], [ ...

  3. idea函数被调用

    打开一个复杂的程序或者项目进行分析的时候,我们就需要知道一个方法在哪里被调用,用于迅速厘清代码逻辑.操作如下:选中函数,右键,点击Find Usages. 如图: 操作简单,但右键还是没有快捷键方便. ...

  4. ES6的let

    1.let声明的变量只在它所在的代码块有效. 例子: var a = [];for (var i = 0; i < 10; i++) {a[i] = function () {console.l ...

  5. mask_rcnn训练自己的数据集

    1.首先从官方下载mask_rcnn源码https://github.com/matterport/Mask_RCNN 2.首先将demo.ipynb转换成demo.py,这里我顺便更改为适用于我自己 ...

  6. linux下jdk8安装

    --- 解压命令不管用 添加插件 yum install tar --- 上传命令不管用 添加插件 wget http://www.ohse.de/uwe/releases/lrzsz-0.12.20 ...

  7. MSSQL转Mysql常用函数,语法等

    MSSQL转Mysql常用 一.字段类型 MSSQL Mysql 备注 "nchar" "char()" 最大长度为255 "nvarchar&quo ...

  8. Apache代理转发http到https

    site.conf ProxyPass /maps https://maps.googleapis.com/maps LoadModule proxy_module modules/mod_proxy ...

  9. 【一:定义】python 简介

    [python基础介绍的比较好的link] https://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac927076 ...

  10. login.html

    <meta name="viewport" content="width=device-width, initial-scale=1,maximum-scale=1 ...