美文网首页
[3D数学]

[3D数学]

作者: 想变的很强的日向彻 | 来源:发表于2019-10-08 15:30 被阅读0次

一:坐标系

1.笛卡尔坐标系

2D坐标系都是‘’等价‘’的,无论原点在哪里,我们都可以通过平移将两个坐标系重合

3D坐标系则存在左手坐标系和右手坐标系的区别,两者通过平移无法完全重合,大拇指为X+, 为食指为Y+,中指为Z+,左右手可以分别描述左手坐标系和右手坐标系

2.常见的坐标系

(1)世界坐标系:描述所有物体的绝对位置的坐标系,即把所有的坐标统一到一个大的坐标系中

(2)物体坐标系:每个物体独立的坐标系,每个物体内部的部件用此坐标系计算简单直观

(3)摄像机坐标系:以摄像机位置为原点的坐标系,可以用来统一物体在摄像机空间下的计算

二:向量

1.表示

(1)向量表示方向,标量表示大小

(2)向量和点结合可以表示特定的位置,即通过将点沿向量方向平移确定位置

(3)一些特殊向量

0向量,各个分量都为0的向量,没有任何方向

2.向量的运算

(1)加减法

将向量的每个分量分别相加或者相减

几何解释,a+b表示将a,b向量首位相连得到的新向量

(2)乘法

点乘(内积):等于对应分量乘积的和,还等于向量大小相乘再乘以夹角的cos值,即结果是一个标量,描述了两个向量的相似程度,结果越大两个向量越接近

叉乘(外积):[x1,y1,z1]*[x2,y2,z2] = [y1z2-y2z1, z1x2-x1z2, x1y2-x2y1],叉乘的优先级高于点乘,运算结果仍然是一个向量,而且这个向量垂直于两个向量所在的平面,由此延伸,如果a,b两个向量互相垂直,那么和叉乘的结果组成的三个向量互相垂直,可以作为一组三维坐标

叉乘的方向确定:右手定则,aXb,四指从a到b,大拇指所指的方向就是结果向量的方向

叉乘的结果的大小:aXb = |a|*|b|*sinA,正好是以a,b向量为边的平行四边形的面积

(3)向量乘以标量等于把向量的每个分量分别乘以这个标量

(4)向量的模a(x,y)=sqrt(x*x+y*y),标准化(normalize)即用向量除以他的模

(5)自己实现向量类(实践)

三:矩阵

(1)概述:一个有r行c列的矩阵,可以这样理解,向量是标量的数组,而矩阵是向量的数组

(2)方阵:行数=列数的矩阵称作方阵,对角元素指的是行号和列号相同的元素,如果所有非对角元素都是0,那么则成为对角矩阵,单位矩阵是一种特殊的对角矩阵,对角元素均为1的对角矩阵是单位矩阵

(3)向量作为矩阵表示:1*n矩阵称为行向量,n*1称为列矩阵,可以说向量是一种特殊的矩阵

(4)矩阵的转置:将矩阵沿着对角线反折,转置可以使行向量变成列向量;特性:任意矩阵的转置的转置等于本身,任意对角矩阵的转置等于本身

(5)标量和矩阵相乘:用标量分别乘以矩阵中的每个元素

(6)矩阵乘法:

前提是a的列数等于b的行数,如果不匹配没有意义,

排列乘法,

不满足交换律(行列数可能都不匹配),

向量和矩阵相乘,等同于矩阵乘法,行向量左乘(行向量在左乘以一个矩阵)结果是行向量,列向量右乘矩阵结果是列向量;由此可以看到,向量标识三维中的点的话,可以通过矩阵对其进行变换,而保证得到的结果仍然是三维空间中的点

(7)矩阵的几何解释

几种变换:旋转,缩放,投影,镜像,仿射

四:矩阵和线性变换

(1)变换物体和坐标系

(2)旋转

(3)缩放

(4)正交投影和透视投影:前者的投影线相互垂直,后者投影线会相交

(5)镜像:沿任意轴的翻转

(6)切变:非均匀拉伸,X = X + sY,Y = Y

(7)组合变换:模型空间->世界空间->摄像机空间,三个矩阵通过矩阵乘法的结合律可以合并成一个矩阵

(8)变换的分类:

1.线性变换:F(a+b) = F(a)+F(b)

2.仿射变换:仿射变换指的是线性变换后接着平移,即任何线性变换都是仿射变换,但不是所有仿射变换都是线性变换

3.可逆变换:变幻的矩阵具有可逆矩阵,即矩阵是可逆的,则这个变换是可逆变换

4.等角变换:变换前后两个向量的大小和方向都不改变

5.正交变换:轴垂直不进行缩放变换

6.刚体变换:只改变物体的位置和方向,不包括长度,角度,面积,体积

(9)矩阵的行列式

1.行列式:右下-左上

2.矩阵积的行列式等于矩阵行列式的积|AB| = |A||B|;

3.矩阵转置的行列式等于原矩阵的行列式

4.矩阵的任意行或者列为0,那么他的行列式为0

5.交换矩阵的任意两行或者两列,行列式变为负

6.行列式的几何解释,行列式等于以基向量为两边的平行四边形的有符号面积

(10)矩阵的逆

1.矩阵的逆乘以矩阵结果是单位矩阵

2.单位矩阵的逆是他本身

3.矩阵转置的逆等于他逆的转置

4.矩阵乘积的逆等于矩阵的逆的相反顺序的乘积

5.用途,进行逆变换或者撤销原变换

(11)正交矩阵

1.矩阵乘以他的转置矩阵等于单位矩阵,即矩阵的转置矩阵等于他的逆矩阵,这样可以在计算时通过直接用逆矩阵代替转置矩阵来简化计算

2.若一个矩阵是正交的那么它应该满足:矩阵的每一行都是单位向量,矩阵的所有行互相垂直

(12)4*4齐次矩阵

3*3矩阵表示的是线性变换,不包含平移,4*4矩阵能表示平移,4D中w分量能够开关4*4矩阵的平移部分

五:方位和角位移


1.矩阵形式

优点:1.可以立即对向量进行旋转

           2.矩阵的形式被api利用,也就是矩阵可以直接拿来计算,而其他的形式则要转化成矩阵

           3.多个角位移连接直接将矩阵连接

           4.矩阵的逆,因为旋转矩阵是正交的,所以求逆只是求转置,简化计算

缺点:1.内存占用大,一个矩阵需要保存16个浮点数

           2.不直观,直接观察一个矩阵并不能知道他进行了什么角度变换

           3.矩阵可能是病态的,矩阵中的元素并不一定都是有用的

2.欧拉角

欧拉角是将角位移分解为绕三个互相垂直轴的三个旋转序列(万向锁是一个底层问题,至今没有解决方案)

优点:1.对于我们来说很直观,很容易使用

           2.表达简洁,占用内存小

           3.任意三个数都是合法的

缺点:1.给定方位的表达方式不唯一

           2.两个角度求插值非常困难(0和360,720都是一个角度)

3.四元数

一个标量+一个3D向量分量

Quaternion camPosRotation = Quaternion.Euler(rotY, rotX, 0);,将一个三维的rotation转化成一个四元数,

_CameraTrans.position = camPosRotation * PcCameraDis然后左乘一个三维的向量 可以实现对三维向量的旋转,而三维的rotation是不能直接相乘进行旋转的。

优点:1.平滑插值,其他方法不容易平滑插值

           2.快速连接和角位移求逆,四元数叉乘能将角位移序列转换为单个角位移

           3.能和矩阵形式快速转换

           4.仅用四个数表示,比较高效

缺点:1.比欧拉角稍微大一点

           2.四元数可能不合法(可以通过标准化四元数来解决)

           3.难以使用

4.各方法比较

1.欧拉角最容易使用和被人使用

2.如果在坐标系之间转换向量,选择矩阵形式

3.需要大量保存数据时使用四元数或者欧拉角,节省内存占用

4.平滑的插值只能使用四元数来完成,如果用其他形式则需要先转换到四元数

相关文章

  • 书单

    《3D数学基础》《代码大全2》《CLR Via C#》《程序员的数学》

  • OpenGL向量、矩阵应用

    一、3D数学 3D数学.在图像图形开发中的充当了什么⻆色?对于学习OpenGL 有一个误区,就是大家认为如果不能精...

  • OpenGL 之3D数学

    3D数学和图像图形的关系 对于学习OpenGL 有一个误区,就是大家认为如果不能精通那些3D图形数学知识,会让我们...

  • 3D数学

    1, 向量 2, 矩阵 3, 欧拉角 4, 四元数 5, 坐标系变换 6, 齐次坐标与透视变换的推导 齐次坐标 向...

  • [3D数学]

    一:坐标系 1.笛卡尔坐标系 2D坐标系都是‘’等价‘’的,无论原点在哪里,我们都可以通过平移将两个坐标系重合 3...

  • Unity基础-向量

    向量是2D、3D数学研究的标准工具,在3D游戏中向量是基础。 一、向量 1、向量的数学定义 向量就是一个数字列表,...

  • 动画

    3D旋转3D数学:欧拉角、万向锁、四元数[https://www.cnblogs.com/HDDDDDD/p/15...

  • 3D引擎编程的4个阶段

    3D引擎编程的4个阶段 第一阶段是了解3D原理和数学基础,大学里面学的线性代数,概率统计和高等数学完全足够,在3D...

  • 3D数学基础

    向量 标量(Magnitude) 坐标系 左手坐标系和右手坐标系 点积 Vector3.Dot(VectorA,V...

  • 3D数学介绍

    多坐标系 摄像机坐标系是和观察者密切相关的坐标系。摄像机坐标系和屏幕坐标系相似,差别在于摄像机坐标系处于3D空间中...

网友评论

      本文标题:[3D数学]

      本文链接:https://www.haomeiwen.com/subject/xgcspctx.html