【3D研发笔记】之【数学相关】(一):坐标系
现在开始学习3D基础相关的知识,本系列的数学相关笔记是基于阅读书籍《3D数学基础:图形与游戏开发》而来,实现代码使用AS3,项目地址是:https://github.com/hammerc/hammerc-Snake3D-as3与https://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空间)上。
惯性坐标系
惯性坐标系是一种辅助坐标系,其目的是用来简化两个坐标系之间的转换。惯性坐标系总是平行于世界坐标系,即其只表示物体坐标系相对于世界坐标系的平移,而不管物体坐标系的旋转,将多个操作进行简化。
【3D研发笔记】之【数学相关】(一):坐标系的更多相关文章
- Python学习笔记17:标准库之数学相关(math包,random包)
前面几节看得真心累.如今先来点简单easy理解的内容. 一 math包 math包主要处理数学相关的运算. 常数 math.e # 自然常数e math.pi # 圆周率pi 运算函数 math ...
- DSP EPWM学习笔记2 - EPWM相关寄存器设置问题解析
DSP EPWM学习笔记2 - EPWM相关寄存器设置问题解析 彭会锋 本篇主要针对不太熟悉的TZ 故障捕获 和 DB 死区产生两个子模块进行学习研究 感觉TI的寄存器命名还是有一定规律可循的 SEL ...
- codeforces 687B - Remainders Game 数学相关(互质中国剩余定理)
题意:给你x%ci=bi(x未知),是否能确定x%k的值(k已知) ——数学相关知识: 首先:我们知道一些事情,对于k,假设有ci%k==0,那么一定能确定x%k的值,比如k=5和ci=20,知道x% ...
- [自用]多项式类数学相关(定理&证明&板子)
写在前面 由于上一篇总结的版面限制,特开此文来记录 \(OI\) 中多项式类数学相关的问题. 该文启发于Miskcoo的博客,甚至一些地方直接引用,在此特别说明:若文章中出现错误,烦请告知. 感谢你的 ...
- [总结]数论和组合计数类数学相关(定理&证明&板子)
0 写在前面 0.0 前言 由于我太菜了,导致一些东西一学就忘,特开此文来记录下最让我头痛的数学相关问题. 一些引用的文字都注释了原文链接,若侵犯了您的权益,敬请告知:若文章中出现错误,也烦请告知. ...
- Irrlicht 3D Engine 笔记系列 之 自己定义Animator
作者: i_dovelemon 日期: 2014 / 12 / 17 来源: CSDN 主题: Custom Animator, Referenced count 引言 在昨天的文章<Irrli ...
- [总结]多项式类数学相关(定理&证明&板子)
目录 写在前面 前置技能 多项式相关 多项式的系数表示 多项式的点值表示 复数相关 复数的意义 复数的基本运算 单位根 代码相关 多项式乘法 快速傅里叶变换 DFT IDFT 算法实现 递归实现 迭代 ...
- [总结]其他杂项数学相关(定理&证明&板子)
目录 写在前面 一类反演问题 莫比乌斯反演 快速莫比乌斯变换(反演)与子集卷积 莫比乌斯变换(反演) 子集卷积 二项式反演 内容 证明 应用举例 另一形式 斯特林反演 第一类斯特林数 第二类斯特林数 ...
- Java.util.Math类--数学相关的工具类
Math类--数学相关的工具类 java.util.Math类是数学相关的工具类,里面提供了大量的静态方法,完成与数学运算相关的操作. public static double abs(double ...
随机推荐
- 强强合体:Docker版Kali Linux发布
Kali Linux是一款开源的基于Debian的渗透测试专用操作系统,系统中包含一系列用于渗透测试的神器.最近,Kali的开发者们为喜爱Docker的童鞋们发布了新版本. FreeBuf百科:什么是 ...
- C语言字节对齐
转自:http://blog.csdn.net/21aspnet/article/details/6729724 文章最后本人做了一幅图,一看就明白了,这个问题网上讲的不少,但是都没有把问题说透. 一 ...
- eclipse如何导入PHP的项目
http://zhidao.baidu.com/link?url=2jvsgawRlEWzE63-Wm-e51_Nl0dWH1Z4z5VS_s2E824y2fYqsvNzdZ8GfEh6DOVtjY8 ...
- Compiler options do not specify -mv64+, but configuration is for C64x+
2013-06-20 10:02:47 错误报告: "pin_connect_cfg.s62", ERROR! at line 365: [ ***** USER ERROR ...
- 查看32bit的ARM(比如ARMv7)反汇编
1.使用./arm-eabi-as test.S -o test.o编译 2.使用./arm-eabi-objdump -d test.o反汇编
- Android 签名(3)已签名的apk中的文件
已经签名 apk包中签名相关的文件在meta_INF目录下 CERT.SF:生成每个文件相对的密钥 MANIFEST.MF:数字签名信息 xxx.SF:这是JAR文件的签名文件,占位符xxx标识了签名 ...
- C#中string.Format()和ToString()格式化方法
C#数字格式化输出是我们在编程中经常需要处理的事情,那么这里向你介绍了一些C#数字格式化输出的例子,这样就会方便你来选择和比较,什么方式是比较适合自己项目的. int a = 12345678; C# ...
- git整理纷乱的历史合并记录
https://github.com/Epix37/Hearthstone-Deck-Tracker 以上面版本库的master分支为例 父节点1 SHA-1: a21142968282ae49720 ...
- poj1062
经典的图论建模题: 先拿开的等级问题不看: 每个物品本身的价格就是有一个自定义源点到这个点距离: 有了A物品B物品优惠为W就代表由B到A的有向路权值为W: 最后的最小花费就是源点的点1的最短路径(酋长 ...
- UVa 673 (括号配对) Parentheses Balance
本来是当做水题来做的,后来发现这道题略坑. 首先输入的字符串可能是空串,所以我用了gets函数,紧接着就被scanf("%d", &n)后面的换行符坑掉了. 于是乎再加一句 ...