【3D研发笔记】之【数学相关】(一):坐标系

现在开始学习3D基础相关的知识,本系列的数学相关笔记是基于阅读书籍《3D数学基础:图形与游戏开发》而来,实现代码使用AS3,项目地址是:https://github.com/hammerc/hammerc-Snake3D-as3https://github.com/hammerc/hammerc-Snake3D-as3-examples,而3D类库代码则是模仿Away3D的设计来编写的,实现上尽可能模仿Away3D,部分修改的地方学习笔记中会进行特别说明。

言归正传,先看看2D方面,对于2D的笛卡尔坐标系,一共有8种表示方式:

如果N表示y轴,E表示x轴,那么一般2D的坐标系选择的是第二行的第二列来表示(比如Flash中的坐标系),2D坐标系有一个特点,无论使用任何表示方式都可以通过旋转变成任意一种表示方式。

当我们再添加一个轴变成3D坐标系后呢?

左手坐标系和右手坐标系

在3D笛卡尔坐标系中,表示方式变成了48种,并且一种表示方式不能通过旋转任意变换为另一种表示方式了。

但是如果分为24种左手坐标系表示法和24种右手坐标系表示法,在左手或右手坐标系中,2D的定律任然管用,即无论使用任何表示方式都可以通过旋转变成任意一种表示方式。

下面我们看看图片:

书中使用的是左手坐标系,(表示方法是:+x,+y,+z分别指向右方,上方,前方),而Away3D也使用了左手坐标系,我的小类库也就一起使用左手坐标系了。

另外说一下,目前很火的Unity3D也是使用的左手坐标系,但左手和右手坐标系并无好坏之分,只是在计算机图形中一般使用左手坐标系,而在线性代数中更倾向于使用右手坐标系。

如果我们在处理一些运算或使用3D建模软件时,需要特别的看一下其使用的坐标系是否和我们使用的一致,否则会导致错误的结果。

当然左手坐标系和右手坐标系的转换也非常简单,一般来说,我们只要改变任意一个轴的方向为反向即可。

多坐标系

我们在实际使用时不会只使用一个坐标系,而通常会使用到多个坐标系,下面我们来具体的看看:

坐标系嵌套

我们可以从2D空间开始看,在Flash的2D显示列表中是呈现一种树形的结构,每个显示对象都会有一套自己的坐标系,这称为坐标系嵌套,那么在3D中也是一样的情况。

世界坐标系

世界坐标系表示当前空间中最根部的坐标系,可以理解为flash2D中的stage或root对象,可以将世界坐标系看做绝对坐标系。

物体坐标系

即每个显示对象的坐标系,可以看做本地坐标系或相对坐标系。简单的来说,如果在世界坐标系中有一个人,我们叫他“向前走”是按他的本地坐标系来处理,这个人面向的方向不同,其行走的方向就不同,但是对他来说都是向前走,而如果叫他“向东走”,则是按世界坐标来处理,无论这个人面向的方向如何,都应该是走向世界坐标系的东方。

摄像机坐标系

摄像机坐标系可以看做一种特殊的物体坐标系,摄像机要解决的问题是如何把3D空间中的物体正确的显示到屏幕(2D空间)上。

惯性坐标系

惯性坐标系是一种辅助坐标系,其目的是用来简化两个坐标系之间的转换。惯性坐标系总是平行于世界坐标系,即其只表示物体坐标系相对于世界坐标系的平移,而不管物体坐标系的旋转,将多个操作进行简化。

时间: 2024-10-21 23:37:01

【3D研发笔记】之【数学相关】(一):坐标系的相关文章

Python学习笔记17:标准库之数学相关(math包,random包)

前面几节看得真心累.如今先来点简单easy理解的内容. 一 math包 math包主要处理数学相关的运算. 常数 math.e   # 自然常数e math.pi  # 圆周率pi 运算函数 math.ceil(x)       # 对x向上取整.比方x=1.2,返回2 math.floor(x)      # 对x向下取整.比方x=1.2,返回1 math.pow(x,y)      # 指数运算.得到x的y次方 math.log(x)        # 对数.默认基底为e.能够使用base參

Python学习笔记17:标准库之数学相关(之math包,random包)

前面几节看得真心累,现在先来点简单容易理解的内容. 一 math包 math包主要处理数学相关的运算. 常数 math.e   # 自然常数e math.pi  # 圆周率pi 运算函数 math.ceil(x)       # 对x向上取整,比如x=1.2,返回2 math.floor(x)      # 对x向下取整,比如x=1.2,返回1 math.pow(x,y)      # 指数运算,得到x的y次方 math.log(x)        # 对数,默认基底为e.可以使用base参数,

Irrlicht 3D Engine 笔记系列 之 自己定义Animator

作者: i_dovelemon 日期: 2014 / 12 / 17 来源: CSDN 主题: Custom Animator, Referenced count 引言 在昨天的文章<Irrlicht 3D Engine 笔记系列 之 教程4 - Movement>中,博主向大家保证会在今天向大家实际操作怎样扩展Irrlicht引擎的Animator特性.假设读者对Irrlicht的Animator的特性不是非常了解的话,请先了解下前面的那篇文章,本片文章是在上次文章的基础上进行的. Cust

3D显微镜笔记

1. 三视图:能够正确反映物体长.宽.高尺寸的正投影工程图(主视图,俯视图,左视图三个基本视图)为三视图,这是工程界一种对物体几何形状约定俗成的抽象表达方式. 附上自己大二时候设计的减速器--设计了两个星期~ 2. CCD,英文全称:Charge-coupled Device,中文全称:电荷耦合元件.可以称为CCD图像传感器.CCD是一种半导体器件,能够把光学影像转化为数字信号,把光信号转换成电荷信号.CCD上有许多排列整齐的光电二极管,能感应光线,并将光信号转变成电信号,经外部采样放大及模数转

MongoDB权威指南学习笔记4---查询相关的知识点

1 find find({查询条件},{"key":1,"email":1})  后面表示返回哪些键 2 可用的比较操作符 $lt , $lte,$gt,$gte 比如db.users.find({"age":{"$gte":18,"$lte":30}}) 3不等于 find(...{"key":{"$ne":"value"}} 4 in find

Java学习笔记&lt;3&gt;面向对象相关

面向对象的基本思想 从现实世界客观存在的事务出发来构造软件系统,并在系统的构造中尽可能运用人类的自然思维方式,如抽象.分类 继承.聚合.多态等. 类和对象的关系 对象中存储了类规定的数据类型,并且对象可以调用类的方法. java面向对象 <1>对象是java程序的核心,一切皆对象. <2>对象可以看成静态属性(成员变量)和动态属性(方法)的封装体. <3>类是创新同一类型对象的模版,定义了该类型对象应具有的成员变量及方法. 类的定义 成员变量可以用java语言的任何一种

MongoDB权威指南学习笔记5---索引相关的知识点

1 查看查询计划 db.user.find({"username":"xxx"}) .explain() db.doc.find({"es_y":"2014"}).explain() {  "cursor" : "BasicCursor",  "isMultiKey" : false,  "n" : 0,  "nscannedObject

Irrlicht 3D Engine 笔记系列 之 自定义Animator

作者: i_dovelemon 日期: 2014 / 12 / 17 来源: CSDN 主题: Custom Animator, Referenced count 引言 在昨天的文章<Irrlicht 3D Engine 笔记系列 之 教程4 - Movement>中,博主向大家保证会在今天向大家实际操作如何扩展Irrlicht引擎的Animator特性.如果读者对Irrlicht的Animator的特性不是很了解的话,请先了解下前面的那篇文章,本片文章是在上次文章的基础上进行的. Custo

三、Java基础工具(1)_常用类——数学相关类

2018-05-13 数学相关类 一.Math类 Java 的 Math 包含了用于执行基本数学运算的属性和方法,如初等指数.对数.平方根和三角函数.   Math 的方法都被定义为 static 形式,通过 Math 类可以在主函数中直接调用 参考:https://blog.csdn.net/tomorrowtodie/article/details/52590688 ---------------------------------------------------------------