现在开始学习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空间)上。

惯性坐标系

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

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

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

    前面几节看得真心累.如今先来点简单easy理解的内容. 一 math包 math包主要处理数学相关的运算. 常数 math.e   # 自然常数e math.pi  # 圆周率pi 运算函数 math ...

  2. DSP EPWM学习笔记2 - EPWM相关寄存器设置问题解析

    DSP EPWM学习笔记2 - EPWM相关寄存器设置问题解析 彭会锋 本篇主要针对不太熟悉的TZ 故障捕获 和 DB 死区产生两个子模块进行学习研究 感觉TI的寄存器命名还是有一定规律可循的 SEL ...

  3. codeforces 687B - Remainders Game 数学相关(互质中国剩余定理)

    题意:给你x%ci=bi(x未知),是否能确定x%k的值(k已知) ——数学相关知识: 首先:我们知道一些事情,对于k,假设有ci%k==0,那么一定能确定x%k的值,比如k=5和ci=20,知道x% ...

  4. [自用]多项式类数学相关(定理&证明&板子)

    写在前面 由于上一篇总结的版面限制,特开此文来记录 \(OI\) 中多项式类数学相关的问题. 该文启发于Miskcoo的博客,甚至一些地方直接引用,在此特别说明:若文章中出现错误,烦请告知. 感谢你的 ...

  5. [总结]数论和组合计数类数学相关(定理&证明&板子)

    0 写在前面 0.0 前言 由于我太菜了,导致一些东西一学就忘,特开此文来记录下最让我头痛的数学相关问题. 一些引用的文字都注释了原文链接,若侵犯了您的权益,敬请告知:若文章中出现错误,也烦请告知. ...

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

    作者: i_dovelemon 日期: 2014 / 12 / 17 来源: CSDN 主题: Custom Animator, Referenced count 引言 在昨天的文章<Irrli ...

  7. [总结]多项式类数学相关(定理&证明&板子)

    目录 写在前面 前置技能 多项式相关 多项式的系数表示 多项式的点值表示 复数相关 复数的意义 复数的基本运算 单位根 代码相关 多项式乘法 快速傅里叶变换 DFT IDFT 算法实现 递归实现 迭代 ...

  8. [总结]其他杂项数学相关(定理&证明&板子)

    目录 写在前面 一类反演问题 莫比乌斯反演 快速莫比乌斯变换(反演)与子集卷积 莫比乌斯变换(反演) 子集卷积 二项式反演 内容 证明 应用举例 另一形式 斯特林反演 第一类斯特林数 第二类斯特林数 ...

  9. Java.util.Math类--数学相关的工具类

    Math类--数学相关的工具类 java.util.Math类是数学相关的工具类,里面提供了大量的静态方法,完成与数学运算相关的操作. public static double abs(double ...

随机推荐

  1. 转:Build Your First JavaScript Library

    http://net.tutsplus.com/tutorials/javascript-ajax/build-your-first-javascript-library/ Step 1: Creat ...

  2. C++11内存模型的粗略解释

    基本解释 C++11引入了多线程,同时也引入了一套内存模型.从而提供了比较完善的一套多线程体系.在单线程时代,一切都很简单.没有共享数据,没有乱序执行,所有的指令的执行都是按照预定的时间线.但是也正是 ...

  3. 获取html上元素的真正坐标

    使用HTML元素的style.left,style.top,style.width,style.height以及width,height属性,都不能获得元素的真正位置与大小,这些属性取出来的都是原来的 ...

  4. Android-xUtils框架介绍(三)

    继续介绍xUtils的最后两个模块:DbUtils和HttpUtils.首先先介绍第一个SQLite数据库操纵的简单ORM框架,只要能理解xUtils为我们提供的api,相信你也能熟练的把DbUtil ...

  5. JQuery设置与获取RadioButtonList和CheckBoxList的值

    有这样一个问题,要获取ASP.NET控件RadioButtonList的值,首先想到的就是$("#<%=RadioButtonList1.ClientID %>").v ...

  6. c语言中静态区,栈,堆的理解

    对于程序员,一般来说,我们可以简单的理解为内存分为三个部分:静态区,栈,堆. 很多书没有把把堆和栈解释清楚,导致初学者总是分不清楚. 其实堆栈就是栈,而不是堆. 堆的英文是heap:栈的英文是stac ...

  7. Go语言项目的错误和异常管理 via 达达

    Go语言项目的错误和异常管理 最近连续遇到朋友问我项目里错误和异常管理的事情,之前也多次跟团队强调过错误和异常管理的一些概念,所以趁今天有动力就赶紧写一篇Go语言项目错误和异常管理的经验分享. 首先我 ...

  8. 有关SQL

    1.SQL str函数是什么意思? 将数值型转换成指定长度的字符串.str()函数语法:str(数字类型的表达式[,表达式总长度][,小数点后面的位数]),表达式总长度和小数点后面的位数为可选择参数. ...

  9. POJ 3377 Ferry Lanes

    虽然它出现在dp专场里···但是我第一反应是一道最短路题···不过幸好它出现在dp专场里···因为我不怎么会dijstra什么的··· 题意:一条河上有N+1对码头,每个相邻码头之间需要一定时间到达, ...

  10. Python日期时间函数处理

    所有日期.时间的 api 都在datetime模块内. 1 日期的格式化输出 datetime => string import datetime now = datetime.datetime ...