【OpenGL】-002 OpenGL数学基础

本文介绍了OpenGL中关键的数学概念,包括向量的意义及其运算,如向量的加减法、点乘、叉乘等,并详细阐述了这些运算在OpenGL编程中的应用。此外,文章还探讨了反射与透射的计算方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

【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,y,z)|=x2+y2+z2 | ( x , y , z ) | = x 2 + y 2 + z 2

1.2 向量加减

  向量 a⃗ =(ax,ay,az) a → = ( a x , a y , a z ) ,向量 b⃗ =(bx,by,bz) b → = ( b x , b y , b z ) ,则向量加减法计算方式如下:
   a⃗ +b⃗ =(ax+bx,ay+by,az+bz) a → + b → = ( a x + b x , a y + b y , a z + b z )
   a⃗ b⃗ =(axbx,ayby,azbz) a → − b → = ( a x − b x , a y − b y , a z − b z )
img

1.3 点乘

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

1.4 叉乘

  向量 a⃗ =(ax,ay,az) a → = ( a x , a y , a z ) ,向量 b⃗ =(bx,by,bz) b → = ( b x , b y , b z ) ,则向量叉乘计算方法如下:
   w⃗ =a⃗ ×b⃗ =(aybzazby,axbzazbx,axbyaybx)=||a⃗ ||||b⃗ ||sin(θ)n⃗  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⃗  n → 是垂直与这两个向量组成的平面的单位向量。

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

1.5 反射与透射

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

R(refract,η)={0.0,ηRin(η(N⃗ Rin)+k)N⃗ ,k<0.0k0.0 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值