【OpenGL】-002 OpenGL数学基础

  这是我看OpenGL书时的数学笔记。

1、Vector

1.1 意义

  顶点是OpenGL中的一个重要的输入,表示空间中的一个位置,通常可以用一个向量来表示,即一个xyz空间中的三元组。三元组(x,y,z)表示不仅表示了位置还表示了长度(向量的模)。
【OpenGL】-002 OpenGL数学基础

  向量(x,y,z)的模计算公式如下:
  |(x,y,z)|=x2+y2+z2

1.2 向量加减

  向量a=(ax,ay,az),向量b=(bx,by,bz),则向量加减法计算方式如下:
  a+b=(ax+bx,ay+by,az+bz)
  ab=(axbx,ayby,azbz)
【OpenGL】-002 OpenGL数学基础

1.3 点乘

  向量a=(ax,ay,az),向量b=(bx,by,bz),则向量点乘计算方法如下:
  a·b=axbx+ayby+azbz=||a||·||b||·cos(θ)
  其中θab的夹角,0θπ
【OpenGL】-002 OpenGL数学基础
  根据向量的以上性质,可以用于求两个向量的夹角大小:
cos(θ)=a·b||a||·||b||=axbx+ayby+azbz||a||·||b||
如果ab是单位向量,则||a||=1,||b||=1,此时
cos(θ)=axbx+ayby+azbz
向量点乘的性质
(1) 如果a·b=0,则ab.
(2) 如果a·b>0,则0θ<π2.
(3) 如果a·b<0,则π2<θπ.

1.4 叉乘

  向量a=(ax,ay,az),向量b=(bx,by,bz),则向量叉乘计算方法如下:
  w=a×b=(aybzazby,axbzazbx,axbyaybx)=||a||·||b||·sin(θ)·n,其中n是垂直与这两个向量组成的平面的单位向量。

【OpenGL】-002 OpenGL数学基础
  由此可以看出,两个向量的叉乘的结果仍然是一个向量,该向量垂直于由向量ab确定的平面,即wawb.
  w的方向遵循右手定则,手指指向第一个向量,向第二个向量蜷缩手指,角度范围在0θπ,此时,拇指的方向即为w的方向。

1.5 反射与透射

  入射向量Rin,界面法向向量N,入射角度为θ,折射率为η,反射向量记为Rreflect,折射向量记为R(refract,η).则有如下计算公式成立:
  Rreflect=Rin(2N·Rin)N
折射向量计算方法如下:
  k=1η2(1(NRin)2)

R(refract,η)={0.0,k<0.0ηRin(η(NRin)+k)N,k0.0

【OpenGL】-002 OpenGL数学基础

相关文章:

  • 2021-03-26
  • 2021-08-14
  • 2021-09-04
  • 2021-12-24
  • 2022-02-07
  • 2021-06-08
  • 2021-06-25
猜你喜欢
  • 2021-11-28
  • 2021-05-14
  • 2021-08-05
  • 2022-01-15
  • 2021-11-09
  • 2021-06-10
  • 2021-05-14
相关资源
相似解决方案