简介:

本书是关于3D数学、三维空间的几何和代数的入门教材。它旨在告诉你如何使用数学描述三维中的物体及其位置、方向和轨迹。这不是一本关于计算机图形学、模拟,甚至计算几何的书,但是,如果读者打算研究这些科目,那么肯定需要这里的信息。

这是一本适宜视频游戏程序开发人员阅读的图书。虽然本书假定大多数读者都是为了编写视频游戏而学习,但我们期待更广泛的受众,并且在设计这本书的体例时也考虑到了不同的受众。如果你是程序开发人员或有兴趣学习如何制作视频游戏,欢迎加入! 如果你没有达到这些标准,那么你在这里仍然可以收获很多。

我们已经尽一切努力使本书对设计师和技术美工也很有用。虽然本书中有一些代码片段,但即使对于非程序开发人员来说,它们也很容易阅读(希望如此)。最重要的是,虽然你需要先理解相关的概念才能理解代码,但是反过来并不成立。我们使用代码示例来说明如何在计算机上实现创意,而不是解释这些创意本身。

第一章:笛卡尔坐标系

1.1 一维数学

自然数 Natural Number : 非负整数的集合,其特点是有序性和无限性

因为日常生活中对数字的需要,于是先产生自然数,这里提到是“死羊的个数”。

整数 Integer : 整数是由自然数字和它们的负面对应物组成。

因为生产生活的发展,产生经济活动,逐步开始有贫穷、负债、借贷等需要,于是在自然数的基础上拓展到整数。

**有理数 Rational Number :整数和分数 **

再在整数的基础上拓展,如要买半只羊,拓展到分数领域,便将数字范围由整数拓展到有理数。

实数 Real Number :包括有理数和无理数

有时候也会遇到无法准确表示实际意义的数值,典型的如Π(圆周率)。

我们需要知道是,有理数是可数的(也就是说,可以与自然数一一对应),但实数是不可数的。

对自然数和整数的研究称之为离散数学 Discrete Mathematics

对实数的研究称之为 连续数学 Continuous Mathematics

现实世界却是离散的。这对三维计算机生成的虚拟现实的设计者有何影响?就其本质而言,计算机是离散的和有限的,并且更有可能在创造过程中而不是在现实世界中遇到离散性和有限性的结果。

这些数字可以是short、int、float 和double类型的。

计算机中离散数学所使用的变量类型:

  • short:short是一个16位(bit)的整数,可以存储65536个不同的值
  • int: int是一个32位的整数,它最多可存储4,294,967,296个不同的值
  • float: float 也是一个32位的值,它可以存储有理数的子集(略少于4294967296,在这里细节并不重要)。
  • double: double 和 float类似,但它使用64位而不是32位.

计算机图形学第一定律:

如果它看起来正确,那就是对的。

1.2 二维笛卡尔空间(平面空间)

  • 每个二维笛卡尔坐标空间都有一个特殊位置,称之为原点,Origin,它是坐标系的“中心”,坐标为(0,0)
  • 每个二维笛卡儿坐标空间都有两条直线通过原点。每条线都被称为轴(Axis),并且可以在两个相反的方向上无限延伸。
  • 两个轴彼此垂直(实际上,它们并不是必然要垂直的,但我们看到的大多数常见系统都将具有垂直轴)。

在二维坐标系中描述坐标位置:

在二维中,两个数字即可用于指定位置(事实上,用两个数字来描述一个点的位置就是它被称为二维或二维空间的原因。在三维或三维空间中,需要使用3个数字)。在(2,4)这个示例中,第一个坐标(也就是2)被称为x坐标;第二个坐标(也就是4)被称为y坐标。

请注意,垂直网格线由所有具有相同x坐标的点组成,换句话说,垂直网格线(实际上是任何垂直线)标记常数x的线。同样地,水平网格线标记常数y的线,也就是说,该行上的所有点都具有相同的y坐标。当讨论极坐标空间时,需要稍微回顾一下这个知识点。

1.3 三维笛卡尔空间

1.3.1 新增维度和轴

在三维中,我们需要3个轴来建立坐标系。前两个轴分别称为x轴和y轴,就像在二维中一样(当然,说它们与二维轴相同是不准确的,稍后会有更详细的解释)。我们将第三个轴(可预测地)称为z轴。一般来说,我们会进行设置以使所有轴相互垂直,即每个轴垂直于其他轴。

在三维中,任何一对轴定义包含两个轴并垂直于第三轴的平面。同样,xz平面垂直于y轴,yz平面垂直于x轴。我们可以将这些平面中的任何一个视为自己的二维笛卡儿坐标空间。

1.3.2 在三维空间中指定位置

在三维中,使用3个数字x、y和z指定点,这些数字分别给出yz、xz和xy平面的有符号距离。

距离的测量将沿着平行于轴的直线进行。例如,x值就是到yz平面的有符号距离,沿着平行于x轴的直线测量。

1.3.3左手和右手坐标空间

所有二维坐标系在某种意义上都是“相等的”,对于任何两个二维坐标空间A和B,可以旋转坐标空间A,使得+x和+y的指向与它们在坐标空间B中的指向相同(假设轴是垂直的)。

三维坐标系有两周坐标类型:

左手(Left-Handed)坐标空间和右手(Right-Handed)坐标空间。

如果两个坐标空间具有相同的旋向性(Handedness),则可以旋转它们使得轴对齐;如果两个坐标空间的旋向性相反,那么这就是不可能的。

这是左手三维空间坐标系

这是右手空间坐标系

左旋和右旋坐标系在“正旋转”的定义上也有所不同。

假设在空间中有一条直线,需要围绕这条直线旋转指定的角度,将此直线称之为旋转轴。首先我们必须定义轴“指向”的方向,基于此来指定旋转的正方向。

在左手坐标系中,正向旋转从轴的正端看时是顺时针(Clockwise)旋转的;

而在右手坐标系中,正向旋转是逆时针(Counterclockwise)旋转的。

1.4 一些零散的知识

求和表示法(Summation Notation)

要获取一系列数值的乘积,可用类似的表示法:

区间符号

\[[a,b] <==> a \le x \le b
\]
\[(a,b) <==> a < x <b
\]

角度、度数和弧度

度 Degree : 360度 为一周

弧度 Radian: 测量度数所对应的那段弧的长度,

三角函数

使用单位圆来定义三角函数:

在二维中,如果以指向+x的单位线条开始,然后逆时针旋转该线条角度0,则可以在标准位置(Standard Position)绘制该角度(如果该角度为负,则沿另一个方向旋转线条)。

这样旋转的线条端点的(x,y)坐标具有特殊属性,并且在数学上非常重要,因此,它们被赋予了特殊函数,称为角度的余弦(cosine)和正弦(sine),定义如下:

在正弦和余弦函数基础上可以继续定义割线、余割、切线和余切

\[割线:sec \theta = \frac{1}{cos\theta}, 切线 :tan\theta = \frac{sin\theta}{cos\theta},余割:csc\theta = \frac{1}{sin\theta},余切:cot\theta = \frac{1}{tan\theta}=\frac{cos\theta}{sin\theta}
\]

比关系,谨记勾股定理:勾3 股4 弦5

\[余弦函数:cos\theta = \frac{x}{r} ,正弦函数:sin\theta = \frac{y}{r},正切函数:tan\theta = \frac{y}{x}
\]
\[割线函数:sec\theta = \frac{r}{x},余割函数:csc\theta = \frac{r}{y},余切函数:cot\theta = \frac{y}{x}
\]

三角函数之间的恒等式:

\[sin(-\theta) = -sin\theta ,cos(-\theta) = cos\theta ,tan(-\theta) = - tan\theta
\]
\[sin(\frac{\pi}{2} - \theta) = cos\theta, cos(\frac{\pi}{2} - \theta) = sin\theta,tan(\frac{\pi}{2} - \theta) = cot\theta,
\]

勾股定理:(毕达哥拉斯定理)

\[sin^2\theta + cos^2 \theta = 1, 1 + tan^2 \theta = sec^2 \theta, 1+cot^2 \theta = csc^2\theta
\]

倍角公式:

正弦定理和余弦定理:

3D数学基础:图形和游戏开发(第二版)--读书笔记(1)的更多相关文章

  1. [3D数学基础:图形与游戏开发]专栏前言

    期待的书终于到了,接下来我会把自己的学习笔记以及心得整理出来,形成专栏,每一章都进行记录和学习总结,今天是2016年12月30日,再过一天就是元旦了,就要迎来美好的2017年了!!!加油~ 上面的书就 ...

  2. 《unity 3D 游戏开发 第二版》宣雨松 分享 pdf下载

    链接:https://pan.baidu.com/s/1LfRTGUmaE_lGdcmd6QiZkg 提取码:e2sn

  3. Unity3d/2d手机游戏开发第二版 (金玺曾) 随书资源

    http://pan.baidu.com/s/1c0xpn4s Unity3d2d手机游戏开发配书资源文件.rar 1.36G 书上的链接坏掉了,我在论坛上面买了一份,放这分享给买了书找不到资源的同学 ...

  4. 《ECMAScript标准入门》第二版读书笔记

    title: <ECMAScript标准入门>第二版 date: 2017-04-10 tags: JavaScript categories: Reading-note 2015年6月, ...

  5. 《细说PHP》第二版--读书笔记

    第五章 PHP的基本语法 5.2.4 在程序中使用空白的处理 5.3 变量 5.3.1 变量的声明 在php中变量的声明必须是使用一个$符号,后面跟变量名来表示 unset()函数释放指定变量 iss ...

  6. Android深度探索--HAL与驱动开发----第二章读书笔记

    1. 底层开发工具包括: JDk6或者以上版本:Eclipse3.4或以上版本:ADT(用于开发Android应用程序),CDT(用于开发AndroidNDK程序):Android SDK:Andro ...

  7. sed&awk第二版读书笔记

    1. POSIX标准对正则表达式字符和操作符的含义进行了形式化.这种标准定义了两类正则表达式:基本的正则表达式(BRE),grep和sed使用这种正则表达式;扩展的表达式,egrep和awk使用这种正 ...

  8. Docker技术入门与实战 第二版-学习笔记-10-Docker Machine 项目-2-driver

    1>使用的driver 1〉generic 使用带有SSH的现有VM/主机创建机器. 如果你使用的是机器不直接支持的provider,或者希望导入现有主机以允许Docker Machine进行管 ...

  9. Docker技术入门与实战 第二版-学习笔记-8-网络功能network-3-容器访问控制和自定义网桥

    1)容器访问控制 容器的访问控制,主要通过 Linux 上的 iptables防火墙来进行管理和实现. iptables是 Linux 上默认的防火墙软件,在大部分发行版中都自带. 容器访问外部网络 ...

  10. 《Kinect应用开发实战》读书笔记---干货集合

    本文章由cartzhang编写,转载请注明出处. 所有权利保留. 文章链接: http://blog.csdn.net/cartzhang/article/details/45029841 作者:ca ...

随机推荐

  1. ELT已死,EtLT才是现代数据处理架构的终点!

    提到数据处理,经常有人把它简称为"ETL".但仔细说来,数据处理经历了ETL.ELT.XX ETL(例如,Reverse ETL.Zero-ETL)到现在流行的EtLT架构几次更迭 ...

  2. idea 的Tomcat 的简单配置

    不限速网盘下载: https://kohler.lanzouv.com/iSSfc0akw3vc 官网下载: https://tomcat.apache.org/download-80.cgi 正常解 ...

  3. 图穷匕见-所有反DDD模式都是垃圾

    本文书接上回<主观与客观,破除DDD凭经验魔咒>,关注公众号(老肖想当外语大佬)获取信息: 最新文章更新: DDD框架源码(.NET.Java双平台): 加群畅聊,建模分析.技术实现交流: ...

  4. 小tips:CSS实现0.5px的边框的两种方式

    方式一 <style> .border { width: 200px; height: 200px; position: relative; } .border::before { con ...

  5. chainLink vrf实验

    目标 用vrf写一个随机红包 数据结构 红包: struct Envelope { Type t; // 类型,只是erc20 和eth红包 ERC20 token; // erc20 ,如果是erc ...

  6. SpringMVC —— RESTful案例

    案例:基于RESTful页面数据交互            

  7. 多表查询 —— 内连接&外连接&子查询

    连接查询 内连接 1.查询语法 -- 隐式内连接 select 字段列表 from 表1, 表2... where 条件; -- 显式内连接 select 字段列表 from 表1 [INNER] j ...

  8. JavaScript —— 简介-引入方式

    什么是JavaScript?    JavaScript的引入方式:      

  9. 嵌入式Linux ubi文件系统制作、分区设置、只读文件系统,uboot启动参数root

    当前平台, 基于君正的X10000平台的嵌入式Linux 系统 0  目的 我要设置根文件系统为可读写, 设置data分区上的文件系统为只读 1 设置各文件系统的读写属性 /bin/mount -o ...

  10. 线段树与二分操作 vases and flowers ——hdu 4614

    操作1,的关键是找到第一只和最后一只空花瓶,完全可以利用二分法查找,找第一只花瓶可以在[X,N]内查找,第一个位置pos1,最后一只花瓶则在[POS1,N]中找,然后更新[POS1,POS2],全部置 ...