《3D数学基础:图形与游戏开发》 学习笔记(一)
(以下学习笔记为本人最近在学习本书的时候所记载,之中还加入了一些做项目过程中遇到的问题,以及相关知识的补充。笔者水平有限,文中不足之处,还请给予指正,谢谢~)
1.将左手坐标系变换到右手坐标系,只需改变其中一个轴的方向即可。
若改变两个轴的方向,则与旋转坐标轴无异。
若改变两个轴的方向,则与旋转坐标轴无异。
左手坐标系有24种(4*2*3) ,右手坐标系也有24种。
2. 四种坐标系: 物体坐标系、世界坐标系、惯性坐标系、摄像机坐标系
3. 点的平移、旋转方向 始终与 轴相反。(比如开车向前,世界向后;您向右转,世界向左转)
4.向量箭头,箭头是“尾”,箭末是“头” 向量有大小和方向,但是没有位置
5 .AABB包围盒: 从一个点(x,y,z)到另一个点(x2,y2,z2)的沿坐标轴的不同路径走法,构成了AABB包围盒。
6. 向量点乘的几何意义: 向量点乘结果越大,则两个向量越“接近”,越相似。
零向量与任何其他向量都垂直。
a·bxc称为三重积。
7. 向量叉乘的几何意义: 向量叉乘的大小axb =|a||b|sinθ,等于以a和b为边的平行四边形的面积大小。
向量叉乘方向的判断,在左手坐标系中用左手,右手坐标系中用有右手,两个坐标系刚好相反。
将向量变成头尾相接来判断。如axb,则a的头接到b的尾。
8. 保持向量类的简单性,需要表达式调用的函数,比如叉积x,应该定义成非成员函数。
不需要在向量类上做过多的优化,不要为了5%的提升而牺牲100%的代码复杂性。
9. 向量可表示为基向量组的线性求和。
10. 2D中想象矩阵的方法,就是将矩阵的每一行抽取出来,当作一个个基向量,在2D笛卡尔平面上画出2条,成"L形"状,从而便可以得知矩阵所进行的变换类型。
如|2 1|
|-1 2| 就是对应将坐标系逆时针旋转26度(arcsin(1/根号5))
矩阵的每一行都可以是变换后的基向量。
平行四边形,又称为“旋转盒”,不仅旋转,还会拉伸。
拉伸倍数根据对应的行向量的模长决定(列向量右乘时,即变成列向量的模长)
11.
代表顺时针旋转90度,想象L形
12. 【极分解】
将一个矩阵A分解为 A = UP.
连续介质力学中使用极分解来将形变分解成拉伸和旋转的部分,其中 P表示拉伸的部分,U表示旋转的部分。
13. 【3个向量的交叉积】
14. 【行列式的重要性质】
2D中,行列式等于以基向量为两边的平行四边形的有符号面积。如果平行四边形相对于原来的方位“翻转”,那么面积变负。
3D中,行列式相对应的则为平行六面体的有符号体积,如果变换使得六面体“由里向外”翻转,则负。
行列式的绝对值与面积、体积的改变相关。
如果行列式为0,那么该矩阵一定包含投影。
如果行列式为负,那么该矩阵包含镜像。
15. 【利用4D矩阵同时表示旋转和平移】齐次坐标
4D坐标的w分量可以开关是否平移(对无穷远点平移没有用,相当于没平移)
16. 【绕不在原点的轴/平面进行旋转】
基本思想,先乘T将轴平移到“原点”,之后乘R转动矩阵,最后乘T的逆(T^-1),即为结果。
即 v_new = v TR(T^-1)
(p·R可以理解为扇形的弦长,如此便构造出来旋转+平移的4D仿射矩阵)
17. 【透视投影】
18. 【四元数!!!】
因为欧拉角一些固有的数学原因,导致“万向锁”的出现,但是,四元数就不会导致这个问题了!!
四元数能够被解释为“轴-对”的形式, “n-θ”格式,n为任意的旋转轴,θ为旋转角度。
记住,ij=k,而不是0!
四元数求负与原四元数表示的角位移是一样的,因为:
cos((θ+360)/2) = cos (θ/2 +180) = - cos (θ/2)
【四元数叉乘】
19. Matrix 4x3类
20. 3D射线
射线就是有向线段
3D射线是对2D射线的一个扩展,只要再加上z(t) = z0 + t Δz即可。 其中Δx= x1-x0(x0是起点)
向量形式的表示:
在一些相交性检测中,可能会使用上述形式的一种变体,d为单位向量,t从0变化到L,L是射线的长度。
21. 点到直线的距离公式:
22. 【第12章——几何图元课后习题】(思路)
a. 平面方程,先由叉乘算出法向量n, 再根据n · p = d,算出d,之后便得平面方程。
b. 计算点到平面的有符号距离 l =n · q - d ,若l>0,则是正面,否则为反面.
c. 同上,l的绝对值即为.
d. 此处可选择用投影法,即舍弃n 中最大的分量对应的坐标,再在投影平面进行计算重心坐标。
或者,根据三个子三角形与三角形有符号面积之比进行计算。
e. 这三个心都有对应的公式进行计算。
《3D数学基础:图形与游戏开发》 学习笔记(一)相关推荐
- 【web编程技术学习笔记】因特网与万维网简介
目录 Client客户端 Server服务器端 TCP/IP五层协议 IP 查看IP地址的的两种方法 TCP URL 样式一 样式二 DNS URL&DNS HTTP 与因特网有关的组织 IE ...
- 程序员编程技术学习笔记
程序员编程技术学习笔记 看july的博客也有好久了,一直没能好好整理一下自己的学习笔记,开了博客之后更加愿意好好整理一番了.其中不免有些内容在july那里可以找到原文,但是更多的加入了我个人的 ...
- JAVA 网络编程技术学习笔记
目录 一.网络编程基本概念(了解) 1.1 计算机网络 1.2 网络通信协议 1.2.1什么是网络通信协议 1.2.2 OSI七层协议模型 1.2.3网络协议的分层 1.3数据的封装和解封 1.4 I ...
- 《ASP.NET MVC4 WEB编程》学习笔记------Web API 续
目录 ASP.NET WEB API的出现缘由 ASP.NET WEB API的强大功能 ASP.NET WEB API的出现缘由 随着UI AJAX 请求适量的增加,ASP.NET MVC基于Jso ...
- java网络编程技术学习笔记(b站【狂神说Java】网络编程实战讲解)
b站视频链接:[狂神说Java]网络编程实战讲解 文章目录 网络编程 1.1.概述 1.2.网络通信的要素 1.3.IP 1.4.端口 1.5.通信协议 1.6.TCP 文件发送 1.7.UDP 1. ...
- SpringBoot整合第三方技术学习笔记(自用)
SpringBoot整合第三方技术学习笔记 搬运黑马视频配套笔记 KF-4.数据层解决方案 KF-4-1.SQL 回忆一下之前做SSMP整合的时候数据层解决方案涉及到了哪些技术?MySQL数据库与My ...
- java mvc框架代码_JAVA技术学习笔记:SpringMVC框架(内附入门程序开发代码)
原标题:JAVA技术学习笔记:SpringMVC框架(内附入门程序开发代码) JavaEE体系结构包括四层,从上到下分别是应用层.Web层.业务层.持久层.Struts和SpringMVC是Web层的 ...
- ssm 转发请求_千呼万唤!阿里内部终于把这份SSM框架技术学习笔记分享出来了...
SSM SSM(Spring+SpringMVC+MyBatis)框架集由Spring.MyBatis两个开源框架整合而成(SpringMVC是Spring中的部分内容).常作为数据源较简单的web项 ...
- 【C#编程基础学习笔记】6---变量的命名
2013/7/24 技术qq交流群:JavaDream:251572072 教程下载,在线交流:创梦IT社区:www.credream.com [C#编程基础学习笔记]6---变量的命名 ----- ...
- 【C#编程基础学习笔记】4---Convert类型转换
2013/7/24 技术qq交流群:JavaDream:251572072 教程下载,在线交流:创梦IT社区:www.credream.com [C#编程基础学习笔记]4---Convert类型转换 ...
最新文章
- 内存都没了,还能运行程序?
- Go并发编程之美-读写锁
- Python基础教程:函数的可变参数
- 杭电c语言课程设计实验7,杭电1072 BFS 大神给看看啊 郁闷整整10个小时了 不知道哪里错wa...
- random输出1到10之间_第43P,随机数,Python内置库之random
- WCF、WebAPI、WCFREST、WebService之间的区别
- 最近看了两本低代码的书
- Theano 更多示例
- 计算机仿真在机械行业中的应用,计算机仿真技术机械行业应用
- 小项目也可以学习到很多东西
- ThinkPHP删除指定文件(物理删除)
- python set 原理_Python基础教程之dict和set
- 光模块基础知识【快速入门】02
- JavaWeb面试题1
- html实现表格分页显示,js表格分页实现代码
- 涉密专用计算机平台,涉密计算机及移动存储介质保密管理系统(三合一)
- BZOJ1864: [Zjoi2006]三色二叉树
- 关于添加 HKEY_LOCAL_MACHINE32\Software 注册表问题
- 用python绘制y=x,y=1+sinx,编写Python程序,使用numpy、pandas、matplotlib三个扩展库在一个画布中绘制4个子图.
- $inject的用法