3D数学基础:图形和游戏开发(第二版)--读书笔记(1)
简介:
本书是关于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)
要获取一系列数值的乘积,可用类似的表示法:
区间符号
\]
\]
角度、度数和弧度
度 Degree : 360度 为一周
弧度 Radian: 测量度数所对应的那段弧的长度,
三角函数
使用单位圆来定义三角函数:
在二维中,如果以指向+x的单位线条开始,然后逆时针旋转该线条角度0,则可以在标准位置(Standard Position)绘制该角度(如果该角度为负,则沿另一个方向旋转线条)。
这样旋转的线条端点的(x,y)坐标具有特殊属性,并且在数学上非常重要,因此,它们被赋予了特殊函数,称为角度的余弦(cosine)和正弦(sine),定义如下:
在正弦和余弦函数基础上可以继续定义割线、余割、切线和余切
\]
比关系,谨记勾股定理:勾3 股4 弦5
\]
\]
三角函数之间的恒等式:
\]
\]
勾股定理:(毕达哥拉斯定理)
\]
倍角公式:
正弦定理和余弦定理:
3D数学基础:图形和游戏开发(第二版)--读书笔记(1)的更多相关文章
- [3D数学基础:图形与游戏开发]专栏前言
期待的书终于到了,接下来我会把自己的学习笔记以及心得整理出来,形成专栏,每一章都进行记录和学习总结,今天是2016年12月30日,再过一天就是元旦了,就要迎来美好的2017年了!!!加油~ 上面的书就 ...
- 《unity 3D 游戏开发 第二版》宣雨松 分享 pdf下载
链接:https://pan.baidu.com/s/1LfRTGUmaE_lGdcmd6QiZkg 提取码:e2sn
- Unity3d/2d手机游戏开发第二版 (金玺曾) 随书资源
http://pan.baidu.com/s/1c0xpn4s Unity3d2d手机游戏开发配书资源文件.rar 1.36G 书上的链接坏掉了,我在论坛上面买了一份,放这分享给买了书找不到资源的同学 ...
- 《ECMAScript标准入门》第二版读书笔记
title: <ECMAScript标准入门>第二版 date: 2017-04-10 tags: JavaScript categories: Reading-note 2015年6月, ...
- 《细说PHP》第二版--读书笔记
第五章 PHP的基本语法 5.2.4 在程序中使用空白的处理 5.3 变量 5.3.1 变量的声明 在php中变量的声明必须是使用一个$符号,后面跟变量名来表示 unset()函数释放指定变量 iss ...
- Android深度探索--HAL与驱动开发----第二章读书笔记
1. 底层开发工具包括: JDk6或者以上版本:Eclipse3.4或以上版本:ADT(用于开发Android应用程序),CDT(用于开发AndroidNDK程序):Android SDK:Andro ...
- sed&awk第二版读书笔记
1. POSIX标准对正则表达式字符和操作符的含义进行了形式化.这种标准定义了两类正则表达式:基本的正则表达式(BRE),grep和sed使用这种正则表达式;扩展的表达式,egrep和awk使用这种正 ...
- Docker技术入门与实战 第二版-学习笔记-10-Docker Machine 项目-2-driver
1>使用的driver 1〉generic 使用带有SSH的现有VM/主机创建机器. 如果你使用的是机器不直接支持的provider,或者希望导入现有主机以允许Docker Machine进行管 ...
- Docker技术入门与实战 第二版-学习笔记-8-网络功能network-3-容器访问控制和自定义网桥
1)容器访问控制 容器的访问控制,主要通过 Linux 上的 iptables防火墙来进行管理和实现. iptables是 Linux 上默认的防火墙软件,在大部分发行版中都自带. 容器访问外部网络 ...
- 《Kinect应用开发实战》读书笔记---干货集合
本文章由cartzhang编写,转载请注明出处. 所有权利保留. 文章链接: http://blog.csdn.net/cartzhang/article/details/45029841 作者:ca ...
随机推荐
- springboot解析自定义yml
springboot解析自定义yml 在实际项目开发中我们经常需要用到一些自定义配置,并且希望单独配置,方便维护,现在介绍下方式: 方式一手动加载 对于一些不变动的配置,写死在项目中维护,如下 然后在 ...
- disconf分布式配置管理(一) 安装与配置
一.背景 在生产部署过程中,遇到以下问题: 1.由于节点较多,每次增量修改配置文件后都需要每个节点替换配置文件. 2.有些动态配置修改后,需要重启服务. 二.解决方案 1.使用linux文件共享配置文 ...
- 全志TinyVision芯片文章汇总
全志TinyVision芯片 TinyVision开发交流QQ群:821628986 文章目录汇总 教程共计14章,下面是章节汇总: 第0章_TinyVision套件简述 第1章_源码工具文档手册 第 ...
- ollama搭建本地ai大模型并应用调用
1.下载ollama 1)https://ollama.com 进入网址,点击download下载2)下载后直接安装即可. 2.启动配置模型 默认是启动cmd窗口直接输入 1 ollama run l ...
- 禅道项目管理系统权限绕过漏洞(QVD-2024-15263)
本文所涉及的任何技术.信息或工具,仅供学习和参考之用,请勿将文章内的相关技术用于非法目的,如有相关非法行为与文章作者无关.请遵守<中华人民共和国网络安全法>. 1. 概述 1.1 基本信息 ...
- 冲刺 NOIP 400pts + 之神仙专题
冲刺专题之 \(DP\) \(T_A\) Helping People $$codeforces$$ 题意 给定一个长为 \(n\) 序列 \(A\) , 其中有 \(q\) 个区间 \([l , r ...
- Gmail 别名
Gmail 有一个很少人知道但是非常实用的功能,那就是别名.Gmail 允许用户通过在基本邮箱地址中添加特定符号和文本来创建多个别名.这些别名都指向同一个 Gmail 账户,方便用户进行邮件管理.过滤 ...
- LaTeX 三种短横线的区别
在 LaTeX 中,有三种基本的短横线,它们各自的长度和用法都有所不同.这三种短横线分别是连字符.短划线(或数字短横)和长划线.下面是它们的具体描述和用法: 连字符 (Hyphen, '-') 用法: ...
- 【Python + yaml】之yaml文件数据驱动(包括DDT驱动)
写自动化测试代码中,数据驱动传递参数比较方便一些,也便于后期维护,下面介绍两种数据驱动: 下面是test.yaml文件: start_HRApp: ip: 127.0.0.1 port: 4723 i ...
- Kubernetes-13:存储卷Volume介绍及使用
Volume介绍 Volume存在的意义 容器磁盘上的文件的生命周期是短暂的,这就使得在容器中运行重要应用时会出现一些问题,首先,当容器崩溃时,kubelet会重启它,但是容器中的文件将丢失--容器以 ...