一年前,系统学习过3D数学,并记录了一篇博客《C#程序员整理的Unity 3D笔记(十):Unity3D的位移、旋转的3D数学模型》。 一年后,再次温习之。

坐标系:Unity3D使用左手笛卡尔坐标系(Descartes coordinate system)

  • 世界坐标系(world space):在一个游戏场景中,唯一。
  • 物体坐标系\局部坐标系(local\Object space):每个物体有各自的独立的坐标系。如桌子的物体坐标系中,扶手相对桌子腿位置。有时候,不需要对外暴漏太多细节。
  • 摄像机坐标系: 特殊的物体坐标系,用于定义物体在摄像机视野范围内,即那些物体会被摄像机绘制出来。
  • 惯性坐标系 (Intertial):一个“临时”坐标系,为了方便从世界坐标系到物体坐标系的转换,引入的新坐标系。原点和物体坐标系重合,坐标轴平行于世界坐标系。

Unity3D提供的有用的坐标系转换工具:

1 RectTransformUtility

Vector2 WorldToScreenPoint(Camera cam, Vector3 worldPoint)

Ray ScreenPointToRay(Camera cam, Vector2 screenPos)

2 《Unity3D项目实战笔记(1):prefab的插件方式

下面代码可以使得:a.prefab被加载到了A的子节点下面,要使得a显示b点位置,一个办法是把a挂接到B下; 另外一个办法是用transform提供的2个方法,转换局部坐标为世界坐标,实现动态定位。

Vector3 pos = A.transform.TransformPoint(a.localPostion);

b.localpostion = B.transform.InverseTransformPoint(pos);

向量(Vector):  有大小和方向,没有位置

任意一点,都可以从原点开始用向量来表达,这个也是点和向量非常容易为初学者搞混的地方。同时,因为向量和位置无关,故向量可以在坐标系中任何地方使用。

  • 向量数乘,添加通过标量和向量相乘来实现力的系数调节
  • 向量标准化,大小为1的向量。亦称”法线”
  • 负向量,和原向量大小相等,方向相反的向量
  • 向量加法,向量a和向量b收尾向量,从a的尾到b的头的向量。
  • 向量减法,雷同向量加法。
  • 向量点乘(内积),结果为标量,描述了两个向量的”相似”程度,点乘结果越大,向量越接近。

a.b >0: [0, 90), 方向相同

a.b = 0 :90°   向量正交

a.b<0: (90,180] 方向相反

  • 向量叉乘(叉积), 结果为一个垂直于原来的两个向量。

矩阵(Matrix), 这里主要是2*2, 3*3, 4*4方阵

DirectX使用的是行向量,Ope6nGL使用列向量。方阵的行可被解释为基向量

线性变换保持直线和平行线,原点未移动;包含平移的变换称作仿射变换。

变换物体和变换坐标系区别:变换物体,如旋转20°,意味着物体上所有的点都需要进行重新计算,被移动到新的位置。而旋转坐标系时,物体上的点实际未移动,只是在另外一个坐标系中描述他的位置而已;有时候使用变换坐标系,可以节约底层计算量。(例如碰撞检测,需要涉及的物体在同坐标系中)

线性变换,不会导致平移(原点位置不会发生改变);放射变换在线性基础上接着进行平移。

矩阵的行列式,结果为一个标量。

正交矩阵,如果矩阵是正交的,则与它的转置矩阵相乘,结果为单位矩阵。同时,也可知正交矩阵的转置矩阵为逆矩阵。

正交投影(降维操作),也称作平行投影。3D投影到2D屏幕上,该平面称作投影平面。

透视投影,投影线不再平行而是相交于一点–投影中心。类似“小孔成像”,投影是倒着的。

欧拉角,使用三个角度来保存方位:heading,Y轴,(-180,180);pitch, X轴, (-90, 90); bank, Z轴,(-180,180).

四元数(Quation),用4个数字表达方位,避免了欧拉角的”万向锁”、Slerp球形差值问题。

参考书籍:

赞一下,暴风魔镜4 + 小米Note顶配2K屏,具有里程碑意义,能连续玩VR 20分钟以上

分辨率好、陀螺仪好。

相比之下,千元机魅蓝Note 2就是个渣渣:远离千元机,如果你玩VR的话。

VR未来,或许能圆一个小小的遗憾:5年前曾多次出差哈尔滨,刚好有冰雪大世界,心里还是蛮想看的,但是因为畏惧寒冷(-35°的长时间户外活动),故未能出行。如果能通过VR远程看,则再好不过了,呵呵。

Unity3D for VR 学习(6): 再次温故知新-3D数学的更多相关文章

  1. Unity3D for VR 学习(2): 暴风魔镜框架探索

    学习一个新技术,有三个法宝: 法宝1: 掌握厂家提供的用户API手册 法宝2: 掌握厂家提供的demo样例 法宝3:<每个研发人员都应树立的一个demo模式> 故,学习魔镜4技术,亦如是也 ...

  2. Unity3D for VR 学习(8): Unity Shader概述

    从西安到北京高铁上,一位VR老外团队的华人leader对VR技术做了画龙点睛: “3D游戏的核心部分在Render, 国内很多团队美术.程序中间缺失严重.所以3d游戏做不好. VR这块更是至关重要.” ...

  3. Unity3D for VR 学习(7): 360°全景照片

    在VR应用中,有一个相对简单的虚拟现实体验,那就是360°全景照片浏览器, 他可以使得手机拍照的”全景”照片,  得以”恢复”当时拍照的场景全貌,  这个创意的确比单纯的2d图片更有震撼力一些,故本文 ...

  4. Unity3D for VR 学习(9): Unity Shader 光照模型 (illumination model)

    关于光照模型 所谓模型,一般是由学术算法发起, 经过大量实际数据验证而成的可靠公式 现在还记得2009年做TD-SCDMA移动通信算法的时候,曾经看过自由空间传播模型(Free space propa ...

  5. Unity3D for VR 学习(3): 暴风魔镜PC Input小改造–自己动手、丰衣足食

    在做手游的时候,80%时间是在PC调试的,例如业务逻辑.AI算法.核心玩法等. 拿到魔镜提供的demo,晕了,必须得安装到Android机器上,才能调试,究其原因,有三: 需要用到手机陀螺仪 需要用到 ...

  6. Unity3D for VR 学习(1): 又一个新玩具 暴风魔镜 4(Android)

    2016年伊始,有了VR虚拟现实硬件设备:  暴风魔镜4–好奇者的新玩具 . 2015年下半年的朋友圈中各种VR.AR的新闻层次不穷,搞的我也心痒痒的:好歹咱也是职业的Unity3D程序员,高大上的O ...

  7. Unity3D for VR 学习(10): Unity LOD Group 组件

    LOD (Level of Detail), 远小近大思想. LOD,在Unity中是用到了空间换时间的优化方法:即程序加载2套模型,导致包会增大:在运行时刻,远处的用面数少的模型–模糊一些,近处用面 ...

  8. Unity3D for VR 学习(4): 自绘摄像机的视口区域锥体

    在Unity Editor下,当选择Camera组件后,可呈现出Camera视口区域锥体,非常方便.但是当选择其他物体,如Cube后,就无法得知是否在Camera市口区内了,这里我找到了雨松MOMO的 ...

  9. Unity3D之空间转换学习笔记(三):3D数学

    3D数学基础 向量 向量可以看做具有方向和大小的一条线段. 比如:我们如果用点A减去点B,则可以得到一个向量,该向量的方向为点B面向点A的方向,而大小为两点的距离.这个方法在游戏开发中经常用到,比如我 ...

随机推荐

  1. 第五篇 Postman离线安装interceptor插件---Chrome app及录制请求

    在测试中,总是苦恼于无法直接使用chrome浏览器的cookie等信息,终于在茫茫网海中,发现了 https://www.jianshu.com/p/a4223bab1e73, 感谢 智者向内寻求力量 ...

  2. and_or_not 逻辑运算符的操作注解!

    python操作:

  3. [T-ARA][Falling U]

    歌词来源:http://music.163.com/#/song?id=27506041 作词:韩尚元 [作词:韩尚元] 作曲:韩尚元 [作曲:韩尚元] Love is pain Love is pa ...

  4. Amazon.com Seller Distributed Inventory Placement Inventory Placement Service

    Greetings, Thank you for writing to us. I understand that you would like to send inventory to our wa ...

  5. 基于NABCD评论探路者团队贪吃蛇作品及改进建议

    1.根据(不限于)NABCD评论作品的选题 N:随着人们生活压力越来越大,需要去去缓解压力,并且也需要不断进步,学习英语知识. A:它是基于java开发的一款软件,采用逐个吃字母,加长蛇身,增强记忆的 ...

  6. Python学习之路8 - 内置方法

    abs(-230) #取绝对值 all([0,1,-5]) #如果参数里面的所有值都为真就返回真,否则返回假 any([0,1,-5]) #如果参数里面有一个值为真则返回真,否则返回假 ascii([ ...

  7. 20135313_exp4

    实验四      GUI界面的设计和运用 20135313吴子怡 一.实验目的 结合项目,为每个密码学算法设计能够提供使用者用户体验的操作界面,实现加解密.求得消息摘要的功能. 二.代码举例(备注:其 ...

  8. 20172321 2018-2019《Java软件结构与数据结构》第三周学习总结

    教材学习内容总结 第五章 5.1概述 队列是一种线性集合,其元素从一端加入,从另一端删除:队列的处理方式是先进先出(First in First out). 与栈的比较(LIFO) 栈是一端操作,先进 ...

  9. 2018-2019-20172321 《Java软件结构与数据结构》第四周学习总结

    2018-2019-20172321 <Java软件结构与数据结构>第四周学习总结 教材学习内容总结 第六章 6.1列表集合 列表集合是一种概念性表示法,其思想是使事物以线性列表的方式进行 ...

  10. IIS 7.0 的 ASP.NET 应用程序生命周期概述

    文章:IIS 7.0 的 ASP.NET 应用程序生命周期概述 地址:https://msdn.microsoft.com/zh-cn/library/bb470252(v=vs.100).aspx ...