求反射向量

在图形学中,计算光照模型时,经常需要求取反射向量,一般的shader函数库都提供计算反射向量的方法,下面介绍一下如何手动计算反射向量。

给定入射光线向量I和平面法向量N,求反射向量R,如下图。为了方便计算,这里假定I和N都是单位向量(模为1,编程时可先将I和N单位化)

方法一:


设入射光线向量I和反射平面的法向量N之间的夹角为theta。连接I的始端和R的末端,则有

R = 2P - I              (1)

现在问题变成了如何求取P,设入射点0到P与N的交点的向量为S,那么有

P = I + S               (2)

现在问题变成了如何求取向量S,向量S即向量-N(注意,这里是-N,因为S和N的方向相反。)在向量N上的投影,根据向量的投影公式有

因为N是单位向量,简化一下得到

将S代入公式(2),再将P代入公式(1)得到

方法二:

将R平移一下,与向量N的延长线相交。


由于入射角和反射角相等,且I和R的长度也相等,所以三角形ION是等腰三角形。故有

ON = 2S

所以有

R = I + 2S

而S是-I在N上的投影,所以有

由于N是单位向量,简化一下得到

所以

貌似方法二更直观些。

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
我猜测"c" 是指计算机编程语言中的一种。C是一种通用的、高级的编程语言,它广泛应用于软件开发领域。C语言由美国计算机科学家丹尼斯·里奇在20世纪70年代早期开发。他设计C语言的目的是为了开发UNIX操作系统。 C语言是一种在编写底层代码和操作系统时广泛使用的编程语言。它有简单的语法和强大的功能,允许程序员直接访问计算机硬件和内存。C语言也是其他高级语言,如C++和Java的基础。 在C语言中,程序员可以使用C语言的语法编写各种类型的程序,包括控制台应用程序、图形界面、嵌入式系统和网络应用程序。C语言的语法简单明了,理解和学习起来相对较容易。它支持面向过程编程和结构化编程风格。 C语言的特点之一是它的可移植性。C语言编写的程序可以在不同的操作系统和硬件平台上运行,只需稍微修改代码即可适应不同的环境。 此外,C语言还具有高效性和灵活性。由于C语言拥有底层访问硬件的能力,程序员可以编写高性能的程序。C语言的灵活性使得程序员可以通过使用指针和内存管理来进行复杂的数据结构和算法操作。 总体而言,C语言是一种重要且广泛应用的编程语言。它是软件开发领域的基础,并且在计算机科学教育中仍然被广泛教授和使用。无论是从事编程工作的专业人士还是初学者,都有必要学习和了解C语言。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值