3D图形学常用公式

3D图形学常用公式

在图形学中对矢量的运用很多。如在处理模型变换和光照等情况时常常要用到他。转一篇关于矢量运算的文章。
  一.两点距离
2D系统:
Point1(x1,y1),Point2(x2,y2)
距离D=sqr( (x1-x2)*(x1-x2) + (y1-y2)*(y1-y2) )
3D系统:
Point 1 (x1, y1, z1) Point 2 at (x2, y2, z2).

本篇内容来自于书籍《3D图形学基础:图形与游戏开发》,个人总结

xd = x2-x1
yd = y2-y1
zd = z2-z1
距离Distance = SquareRoot(xd*xd + yd*yd + zd*zd)

#1.数学背景与历史

做游戏和demo永远不要去做开方:
1.用LUT查表技术(Look up Table )
2.在做碰撞检测时,误差Distance*Distance<a certain number就可以认为点相撞了

笛卡尔数学由著名的法国哲学家、物理学家、生物学家、数学家”勒奈·笛卡尔”发明。

澳门新葡亰游戏网址,二规格化,单位化(Normalize)
先要说矢量的长度:
矢量Vector(x,y,z)
矢量长度Length(Vector)= |Vector|=sqr(x*x+y*y+z*z)
Normalize后:
(x/Length(Vector),y/Length(Vector),z/Length(Vector))
方向不变,长度为1个单位

##1.1 1D数学 澳门新葡亰游戏网址 1 ###1.1.1
名词解释

三.点乘 点积 数量积(Dot Product)
是一回事儿.首先明确两个矢量的点积是个标量.
中学物理的力做功就是矢量点积的例子:W=|F|.|S|.cos(theta)

  • 整数: 1,2,3,4,50,-70
  • 自然数: 非负整数,1,2,5,100。
  • 有理数: 一个整数除以另一个整数,可以除尽,结果为,1/2、3/4/、0.88。
  • 无理数:
    有些数无法用有理数表示,如圆周长与直径的比值,记作π(pai)。小数点后有无穷的数,除不尽的数。
  • 实数: 有理数 + 无理数的范围,有理数可数,无理数不可数。
  • 离散数学: 研究自然数和整数的领域。
  • 连续数学: 研究实数的领域。

二矢量点积:
Vector1:(x1,y1,z1) Vector2(x2,y2,z2)
DotProduct=x1*x2+y1*y2+z1*z2

##1.2 2D数学 澳门新葡亰游戏网址 2 ###1.2.1
简单介绍

很重要的应用:
1.求二矢量余弦:
由我们最熟悉的力做功:
cos(theta)=F.S/(|F|.|S|)
可以判断二矢量的方向情况: cos=1同向,cos=-1相反,cos=0直角
曲面消隐(Cull face)时判断物体表面是否可见:(法线和视线矢量的方向问题)cos>0不可见,cos<0可见
OpenGL就是这么做的。

  • 二维可以理解为矩形的网格。
  • 高中时我们用的一般坐标系:横轴左-x,横轴右+x,纵轴上+y,纵轴下-y
  • 普通的坐标系,通过旋转变换,镜像变换,可以演化出8种坐标系,它们之间都是等价的。
    澳门新葡亰游戏网址 3

2.Lambert定理求光照强度也用点积:
Light=K.I.cos(theta)
K,I为常数,theta是平面法线与入射光线夹角
老王头的Fast Bump(Add Hyper Link here)也就是依据这个数学模型.但是他用了个很Cheap的Hack来模拟cosine

##1.3 3D数学:

四.叉乘(Cross product)
叉乘:Vector1(x1,y1,z1),Vector2(x2,y2,z2):
其结果是个矢量.
方向是Vector1,Vector2构成的平面法线.再使用右手定则
长度是Length(Vector1)*Length(Vector2)*sin(theta)
theta是Vector1 & Vector2的夹角.
所以,平行的矢量叉乘结果为0矢量(长为0,方向任意)
计算结果矢量:(ox,oy,oz)
ox = (y1 * z2) – (y2 * z1)
oy = (z1 * x2) – (z2 * x1)
oz = (x1 * y2) – (x2 * y1)
用途:计算法向量,这是生成3D图形的很关键一步。

###1.3.1 2种三维坐标系

  • 左手坐标系 澳门新葡亰游戏网址 4
    左手坐标系:拇指指向+x,食指指向+y,中指指向+z(远离自己的方向)

  • 右手坐标系 澳门新葡亰游戏网址 5
    右手坐标系:拇指指向+x,食指指向+y,中指指向+z(远离自己的方向)

  • 左手坐标系经过旋转变化有24种,右手一样也有24种,总共有48种坐标系

  • “左手坐标系” 与 “右手坐标系”不是等价的。

网站地图xml地图