3D数学图形学基础

简介: 3D数学图形学基础!!!3D数学图形学基础!!!3D数学图形学基础!!!

内容来源于《3D数学基础:图形与游戏开发》,以下内容为学习笔记,仅供学习

向量计算

向量的大小(模)

各分量平方和的平方根

dist=Math.sqrt(x*x+y*y+z*z)

单位向量

大小为1的向量

V/|V|

归一化向量,标准化向量:获取向量的方向,即获取向量的单位向量
normalize

加减乘除

[x1,y1,z1]+[x2,y2,z2]=[x1+x2,y1+y2,z1+z2]
[x1,y1,z1]-[x2,y2,z2]=[x1-x2,y1-y2,z1-z2]
k[x,y,z]=[kx,ky,kz]
[x,y,z]/k=[x/k,y/k,z/k]

点积(内积、点乘)

各分向量的乘积

[x1,y1,z1].[x2,y2,z2]=x1*x2+y1*y2+z1*z2

在标准化向量中,点积等于两向量夹角的余弦值,方向相同,点积为1,方向相反点积为-1,相互垂直为0

叉乘(叉积、外积)

[x1,y1,z1]x[x2,y2,z2]=[y1*z2-z1*y2,z1*x2-x1*z2,x1*y2-y1*x2]

两个向量面所组成面的垂直向量

模长为两个向量的模乘积再乘夹角正弦值

两个向量距离

a=[x1,y1,z1]
b=[x2,y2,z2]
(a,b)=|b-a|=Math.sqrt( (x2-x1)^2+ (y2-y1)^2+(z2-z1)^2)

正方体法各个面的向量

上:vec3(0,1,0)
下:vec3(0,-1,0)

左:vec3(-1,0,0)
右:vec3(1,0,0)

前:vec3(0,0,1)
后:vec3(0,0,-1)

向量

转置

a b c
d e f
g h i

=>转置后

a d g
b e h
c f i

矩阵乘法

rxn矩阵A * nxc矩阵B = rxc矩阵C

Cij的结果等于A的第i行向量与B的第j列向量点乘的结果

向量与矩阵的乘法

            a b c
  [x,y,z] *[d e f] =[x*a+y*b+z*g,x*b+y*e+z*h,x*c+y*f+z*i]
            g h i

  a b c     x   a*x+b*y+c*z
 [d e f] * [y]=[d*x+e*y+f*z]
  g h i     z   g*x+h*y+i*z


            a b c
 [1,0,0] * [d e f]=[a,b,c]
            g h i

            a b c
 [0,1,0] * [d e f]=[d,e,f]
            g h i


            a b c
 [0,0,1] * [d e f]=[g,h,i]
            g h i

变换矩阵

x轴 y轴 z轴  变形
m0  m4  m8   m12
m1  m5  m9   m13
m2  m6  m10  m14
m3  m7  m11  m15

2D旋转

R(θ)=[cosθ   sinθ]
      -sinθ  cosθ

3D旋转

绕x轴旋转
      1    0      0
R(θ)=[0  cosθ   sinθ]
      0  -sinθ  cosθ

绕y轴旋转
      cosθ   0   sinθ
R(θ)=[0      1     0 ]
     -sinθ   0   cosθ


绕z轴旋转
      cosθ   sinθ     0
R(θ)=[-sinθ   cosθ    0 ]
      0        0      1

绕[x,y,z]向量方向上的旋转

x^2(1-cosθ)+cosθ  xy(1-cosθ)-zsinθ   xz(1-cosθ)+ysinθ
xy(1-cosθ)+zsinθ  y^2(1-cosθ)+cosθ   yz(1-cosθ)-xsinθ
xz(1-cosθ)-ysinθ  yz(1-cosθ)+xsinθ   z^2(1-cosθ)+cosθ

3D缩放

             k1  0   0
S(k1,k2,k3)=[0   k2  0]
             0   0   k3


[x,y,z]向量方向上的缩放

1+(k-1)x^2  (k-1)xy       (k-1)xz
(k-1)xy     1+(k-1)y^2    (k-1)yz
(k-1)xz     (k-1)yz       1+(k-1)z^2

正交投影(平行投影)

所有点拉平至垂直轴(2D)或平面(3D)上

向x轴投影2D矩阵
Px=[1  0]
    0  0

向y轴投影2D矩阵
Py=[0  0]
    1  0

[x y]方向上的2D投影
1-x^2   -xy
-xy     1-y^2

向xy面投影3D矩阵
     1   0   0
Pxy=[0   1   0]
     0   0   0

向xz面投影3D矩阵
     1   0   0
Pxz=[0   0   0]
     0   0   1

向yz面投影3D矩阵
     0   0   0
Pyz=[0   1   0]
     0   0   1

[x y  z]方向上的3D投影
1-x^2   -xy     -xz
-xy     1-y^2   -yz
-xz     -yz     1-z^2

镜像

物体沿直线(2D)或平面(3D)进行翻折

沿[x,y]向量镜像的2D矩阵
1-2x^2  -2xy
-2xy    1-2y^2


沿[x,y,z]向量镜像的2D矩阵
1-2x^2  -2xy    -2xz
-2xy    1-2y^2  -2yz
-2xz    -2yz    1-2z^2

切变(扭曲变换)

切变是非均匀地拉伸它。切变的时候角度会发生变化,但令人惊奇的是面积和体积却保持不变。基本思想是将某一坐标的乘积加到另一个上

2D沿x轴切变
1  0 
s  1

2D沿y轴切变
1  s 
0  1

3D沿xy面切变
1   0   0
0   1   0
s   t   1

3D沿xz面切变
1   0   0
s   1   t
0   0   1


3D沿yz面切变
1   s   t
0   1   0
0   0   1

矩阵行列式

|M| =  |a  b|=ad-bc
       c  d

|a b c|=aei+bfg+cdh-ceg-bdi-afh
 d e f 
 g h i

4D齐次空间

4D标的基本思想相同实际的3D点能被认为是在4D中w=1“平面”上。4D点的形式为(x,y,z,w),将4D点投影到这个“平面”上得到相应的实际3D点(x/w,y/w,z/w)。w=0时4D点表示“无限远点”它描述了一个方向而不是一个位置。


a b c
d e f
g h i
3x3矩阵可变换为
a b c 0
d e f 0
g h i 0
0 0 0 1

变换矩阵  平移向量[x,y,z]
1   0   0  0
0   1   0  0
0   0   1  0
x   y   z  1

透视投影

投影线相交于一点,该点为投影中心
为投影中心在投影平面前面,投影线到达平面之前已经相交,所以投影平面上的图像是翻转的。当物体远离投影中心时,正交投影仍保持不变,但透视投影变小了。透视缩略
小孔成像的原理

欧拉角

欧拉角的基本思想是将角位移分解为绕三个互相垂直轴的三个旋转组成的序列。描述物体相对于父坐标空间的方位

可分解为三个垂直轴的旋转

  • heading,绕y轴
  • pitch,绕x轴
  • bank,绕z轴

注意:使用限制欧拉角能简化很多基本问题。让一个欧拉角处于限制集里的意思是指 heading和bank在-180"到+180之间,pitch 在-90°到+90°之间。如果pitch 为士90°,则bank 为零

欧拉角=》矩阵

heading旋转角h
cosh  0   sinh
0     1    0
-sinh 0  cosh


pitch旋转角p
1     0      0
0     cosp   -sinp
0     sinp   cosp

bank旋转角b
cosb   -sinb  0
sinb   cosb   0
0      0      1


从欧拉角计算物体到惯性旋转矩阵
cos(h)cos(b)+sin(h)sin(p)sin(b)    sin(b)cos(p)  -sin(h)cos(b)+cos(h)sin(p)sin(b)
-cos(h)sin(b)+sin(h)sin(p)cos(b)   cos(b)cos(p)   sin(b)sin(h)+cos(h)sin(p)cos(b)
sin(h)cos(p)                       -sin(p)         cos(h)cos(p)

几何图元

中心在原点的单位球面上所有点:
x^2+y^2+z^2=1


2D参数表示点在单位圆上
x(t)=cos(2*PI*t)
y(t)=sin(2*PI*t)

球体,圆心(a,b,c),半径r
(x-a)^2+(y-b)^2+(z-c)^2=r^2

圆周长:2*PI*r
圆面积:PI*r^2

球表面积:4*PI*r^2
球体积:(4/3)*PI*r^3


射线参数表示开始点(a,b)
x(t)=a+t*∆x
y(t)=b+t*∆y
向量表示,向量为p,开始点(a,b)p0
p(t)=p0+t*∆p


直线2D
ax+by=d
y=kx+b
向量:p*n=d

平面方程式
ax+by+zc=d

p1,p2,p3三点确定一个法向量
e3=p2-p1
e1=p3-p2
法向量为
(e3*e1)/|(e3*e1)|

图形学

弧度=角度*PI/180
角度=弧度*180/PI

放缩与视场角转换
zoom=1/tan(fov/2)

fov=2arctan(1/zoom)

[x,y,z,w]=>[x/w,y/w,z/w]

裁剪矩阵
x,y,z必须在-w至w之间

n,f为近,远两个切面的距离
zoomx为水平放缩值
zoomy为垂直放缩值

zoomx      0       0          0
0       zoomy      0          0
0         0     (f+n)/(f-n)   1
0         0     (2nf)/(n-f)   0


openGL ,z范围[0,w]

zoomx      0       0          0
0       zoomy      0          0
0         0     f/(f-n)       1
0         0     (nf)/(n-f)    0

光照
镜面反射分量+散射分量+环境分量
相关文章
|
监控 安全 JavaScript
浅谈移动端设备标识码:DeviceID、IMEI、IDFA、UDID和UUID
场景 : 客户提出一个问题就是把用户的登录记录和设备绑定到一起,就是每个人都是固定的设备(可能是安全因素吧)。一开始想的是回去设备的IMEI号和用户账号绑定起来,结果发现IMEI不对外开发,只能另寻他法,最后通过获取设备序列号作为唯一标识。
浅谈移动端设备标识码:DeviceID、IMEI、IDFA、UDID和UUID
|
机器学习/深度学习 计算机视觉
【YOLOv8改进】 ODConv(Omni-Dimensional Dynamic Convolution):全维度动态卷积
ODConv是一种增强型动态卷积方法,通过多维注意力机制在卷积的四个维度上学习互补注意力,提升轻量级CNN准确性和效率。与现有动态卷积不同,ODConv覆盖了空间、输入/输出通道和核数维度。在ImageNet和MS-COCO上,对MobileNetV2|ResNet等模型有显著性能提升,减少参数的同时超越传统方法。代码和论文链接可用。在YOLO系列中,ODConv改进了特征学习,优化了目标检测性能。
|
设计模式 API Python
Python Web:Django、Flask和FastAPI框架对比
Python Web:Django、Flask和FastAPI框架对比
488 0
|
JavaScript Java 测试技术
基于springboot+vue.js的系统附带文章和源代码设计说明文档ppt
基于springboot+vue.js的系统附带文章和源代码设计说明文档ppt
366 1
|
存储 程序员 开发工具
【Excel VBA 从入门到出门】二、Excel VBA 简单使用
【Excel VBA 从入门到出门】二、Excel VBA 简单使用
385 2
|
Android开发 开发者 UED
未来已来:Flutter 引领的安卓与跨平台开发奇幻之旅
【6月更文挑战第8天】Flutter,一款引领安卓与跨平台开发革新的框架,以其高效一致的开发体验、精美UI设计和跨平台能力脱颖而出。开发者可使用相同代码库在多平台开发,降低复杂性。其活跃社区和丰富生态系统进一步增强功能。示例代码展示了一个简单的计数器应用,体现Flutter的易用性。随着技术发展,Flutter有望塑造移动应用的未来,开启奇幻之旅。
120 3
|
安全 Java 数据挖掘
医院门诊预约挂号系统 毕业设计 JAVA+Vue+SpringBoot+MySQL(一)
医院门诊预约挂号系统 毕业设计 JAVA+Vue+SpringBoot+MySQL
375 0
|
供应链 搜索推荐 算法
钉钉叶军:制造业是钉钉的第三大行业战场
前两天,钉钉召开主题为“数字新生”的2022制造业钉峰会。会上,钉钉正式发布制造行业解决方案2.0,该方案以“码上制造”产品为制造行业专属底座,提供设备上钉、计件日结等基础产品,同时结合阿里云平台能力推出采销钉、能耗钉产品,为制造业提供了一套可适配、易拓展的数字生产力工具。
905 0
钉钉叶军:制造业是钉钉的第三大行业战场
|
数据安全/隐私保护 Android开发 开发者
Android--数字签名和数字证书
一、数字签名 1. 概述 数字签名是非对称加密与数字摘要的组合应用 2. 应用场景 校验用户身份(使用私钥签名,公钥校验,只要用公钥能校验通过,则该信息一定是私钥持有者发布的) 校验数据的完整性(用解密后的消息摘要跟原文的消息摘要进行对比) 3.
2096 0