【OpenGL】-002 OpenGL数学基础

【OpenGL】-002 OpenGL数学基础

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

1、Vector

1.1 意义

  顶点是OpenGL中的一个重要的输入,表示空间中的一个位置,通常可以用一个向量来表示,即一个xyz空间中的三元组。三元组(x,y,z)表示不仅表示了位置还表示了长度(向量的模)。
a-point-in-space-is-both-a-vertex-and-a-vector

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

1.2 向量加减

  向量 a = ( a x , a y , a z ) ,向量 b = ( b x , b y , b z ) ,则向量加减法计算方式如下:
   a + b = ( a x + b x , a y + b y , a z + b z )
   a b = ( a x b x , a y b y , a z b z )
img

1.3 点乘

  向量 a = ( a x , a y , a z ) ,向量 b = ( b x , b y , b z ) ,则向量点乘计算方法如下:
   a · b = a x b x + a y b y + a z b z = | | a | | · | | b | | · c o s ( θ )
  其中 θ a b 的夹角, 0 θ π
img
  根据向量的以上性质,可以用于求两个向量的夹角大小:
c o s ( θ ) = a · b | | a | | · | | b | | = a x b x + a y b y + a z b z | | a | | · | | b | |
如果 a b 是单位向量,则 | | a | | = 1 , | | b | | = 1 ,此时
c o s ( θ ) = a x b x + a y b y + a z b z
向量点乘的性质
(1) 如果 a · b = 0 ,则 a b .
(2) 如果 a · b > 0 ,则 0 θ < π 2 .
(3) 如果 a · b < 0 ,则 π 2 < θ π .

1.4 叉乘

  向量 a = ( a x , a y , a z ) ,向量 b = ( b x , b y , b z ) ,则向量叉乘计算方法如下:
   w = a × b = ( a y b z a z b y , a x b z a z b x , a x b y a y b x ) = | | a | | · | | b | | · s i n ( θ ) · n ,其中 n 是垂直与这两个向量组成的平面的单位向量。

vector-cross-product
  由此可以看出,两个向量的叉乘的结果仍然是一个向量,该向量垂直于由向量 a b 确定的平面,即 w a w b .
   w 的方向遵循右手定则,手指指向第一个向量,向第二个向量蜷缩手指,角度范围在 0 θ π ,此时,拇指的方向即为 w 的方向。

1.5 反射与透射

  入射向量 R i n ,界面法向向量 N ,入射角度为 θ ,折射率为 η ,反射向量记为 R r e f l e c t ,折射向量记为 R ( r e f r a c t , η ) .则有如下计算公式成立:
   R r e f l e c t = R i n ( 2 N · R i n ) N
折射向量计算方法如下:
   k = 1 η 2 ( 1 ( N R i n ) 2 )

R ( r e f r a c t , η ) = { 0.0 , k < 0.0 η R i n ( η ( N R i n ) + k ) N , k 0.0

reflect-and-refract

猜你喜欢

转载自blog.csdn.net/freehawkzk/article/details/81081633