转载请注明出处:http://www.cnblogs.com/jerrycg/p/4924761.html 

本系列从零起步,作为学习笔记与大家分享,从基础的数学和图形理论,一步一步实现基于物理的渲染。

Reference:《PBRT》、《Ray Tracing from the Ground Up》

由于光源是三维空间中的辐射光能,对于其传播范围通常使用立体角来描述,先来看一下什么是立体角。

立体角Solid Angles

立体角表示一个锥面所围成的空间部分,用符号\(\omega \)表示。

立体角是以圆锥体的顶点为心,半径为r的球面被锥面所截得的面积来度量的,度量单位为“球面度”(steradian,符号∶sr)。球面度表示为三维弧度。

球坐标系中,球面的极小面积\({dA}_{2}\)为:

\({dA}_{2}=({r}\,\sin\theta\, {d}\varphi )({r\,d\theta })={r}^{2}(\sin\theta\,{d\theta }\,{d}\varphi)\)

整个球面面积为\({dA}\)的积分:

\({A}=\int {dA}_{2}=\int_{0}^{2\pi}\int_{0}^{\pi}({r}\,\sin\theta\, {d}\varphi*{r\,d\theta })={r}^{2}\int_{0}^{2\pi}{d}\varphi\int_{0}^{\pi}\sin\theta\,{d}\theta\)

极小立体角定义为球面面积与球半径平方的比值,即:

\({d\omega} = \frac{dA}{{r}^{2}}=\sin\theta\,{d}\theta\,{d}\varphi\)

对上式积分:

\({\omega} = \int_{0}^{2\pi }{d\varphi }\int_{0}^{\pi } \sin \theta\, {d\theta }={4\pi }\)

可知,最大立体角就是单位球体的表面积。

半球积分

半球积分方程表示为:\({I} = \int_{\omega}{f(\theta, \phi)\cos \theta \, d\omega}\)

其中,\({(\theta, \phi)} \in {[0, \frac{\pi}{2}] [0, 2\pi]}\),\({\omega \in [0, 2\pi]}\),\(\cos\theta \, d\omega\)表示立体角在水平面\({(x, y)}\)上的投影,又称为投影立体角。

当函数\({f(\theta, \phi)} = \cos^{n-1} \theta \)时,

\({I} = \int_{2\pi} \cos^{n} \theta \, {d\omega}\)

\(= \int_{0}^{2\pi} \int_{0}^{\frac{\pi}{2}}{\cos^{n}\theta \sin\theta \, d\phi}\)

\(= \int_{0}^{2\pi} d\phi \int_{0}^{2\pi} {\cos^{n}\theta \sin\theta \, d\theta} \)

\(= {2\pi \int_{0}^{\frac{\pi}{2}} \cos^{n}\theta \, \sin\theta \, d\theta}\)

\(= {2\pi \left[\frac{{\cos\theta}^{n+1}}{n+1} \right]_{0}^{\frac{\pi}{2}}} = \frac{2\pi}{n+1}\)

最终得出当\({f(\theta, \phi)} = \cos^{n-1} \theta \)时,半球积分为:\({I} = \frac{2\pi}{n+1}\)

PBR Step by Step(一)立体角的更多相关文章

  1. Step by step Dynamics CRM 2011升级到Dynamics CRM 2013

    原创地址:http://www.cnblogs.com/jfzhu/p/4018153.html 转载请注明出处 (一)检查Customizations 从2011升级到2013有一些legacy f ...

  2. Step by Step 创建一个新的Dynamics CRM Organization

    原创地址:http://www.cnblogs.com/jfzhu/p/4012833.html 转载请注明出处 前面演示过如何安装Dynamics CRM 2013,参见<Step by st ...

  3. Step by step Install a Local Report Server and Remote Report Server Database

    原创地址:http://www.cnblogs.com/jfzhu/p/4012097.html 转载请注明出处 前面的文章<Step by step SQL Server 2012的安装 &g ...

  4. Step by step Dynamics CRM 2013安装

    原创地址:http://www.cnblogs.com/jfzhu/p/4008391.html 转载请注明出处   SQL Server可以与CRM装在同一台计算机上,也可安装在不同的计算机上.演示 ...

  5. Step by step 活动目录中添加一个子域

    原创地址:http://www.cnblogs.com/jfzhu/p/4006545.html 转载请注明出处 前面介绍过如何创建一个域,下面再介绍一下如何在该父域中添加一个子域. 活动目录中的森林 ...

  6. SQL Server 维护计划实现数据库备份(Step by Step)(转)

    SQL Server 维护计划实现数据库备份(Step by Step) 一.前言 SQL Server 备份和还原全攻略,里面包括了通过SSMS操作还原各种备份文件的图形指导,SQL Server  ...

  7. 转:eclipse以及step into step over step return的区别

    首先来讲一下step into step over step return的区别: step into就是单步执行,遇到子函数就进入并且继续单步执行:(F5) step over是在单步执行时,在函数 ...

  8. [转]Bootstrap 3.0.0 with ASP.NET Web Forms – Step by Step – Without NuGet Package

    本文转自:http://www.mytecbits.com/microsoft/dot-net/bootstrap-3-0-0-with-asp-net-web-forms In my earlier ...

  9. EF框架step by step(7)—Code First DataAnnotations(2)

    上一篇EF框架step by step(7)—Code First DataAnnotations(1)描述了实体内部的采用数据特性描述与表的关系.这一篇将用DataAnnotations描述一下实体 ...

  10. EF框架step by step(6)—处理实体complex属性

    上一篇的中介绍过了对于EF4.1框架中,实体的简单属性的处理 这一篇介绍一下Code First方法中,实体Complex属性的处理.Complex属性是将一个对象做为另一个对象的属性.映射到数据库中 ...

随机推荐

  1. 倍增求lca模板

    倍增求lca模板 https://www.luogu.org/problem/show?pid=3379 #include<cstdio> #include<iostream> ...

  2. 对 JavaScript 进行单元测试的工具

    简介 单元测试关注的是验证一个模块或一段代码的执行效果是否和设计或预期一样.有些开发人员认为,编写测试用例浪费时间而宁愿去编写新的模块.然而,在处理大型应用程序时,单元测试实际上会节省时间:它能帮助您 ...

  3. 引用类型 ( 对象定义 )——Function 类型

    本文地址:http://www.cnblogs.com/veinyin/p/7607798.html  函数实际上是对象,也具有属性和方法,函数名实际上是指向函数对象的指针 function sum( ...

  4. 用java代码调用shell脚本执行sqoop将hive表中数据导出到mysql

    1:创建shell脚本 touch sqoop_options.sh chmod 777 sqoop_options.sh 编辑文件  特地将执行map的个数设置为变量  测试 可以java代码传参数 ...

  5. 简单漂亮的php验证码函数

    /* *说明:函数功能是生成验证码 * 参数说明:输入 长度,宽度,高度 */ function vcode($_code_length = , $_width = , $_height = ){ $ ...

  6. 学习Python函数笔记之二(内置函数)

    ---恢复内容开始--- 1.内置函数:取绝对值函数abs() 2.内置函数:取最大值max(),取最小值min() 3.内置函数:len()是获取序列的长度 4.内置函数:divmod(x,y),返 ...

  7. Linux下libevent安装与示例

    http://www.cnblogs.com/kunhu/p/3632225.html

  8. linux网络配置完全解析

    概述:熟悉了windows下面的网络配置,对linux下的网络配置缺未必了解透彻.熟练掌握linux下的网络配置原理,能帮助我们更容易掌握网络传输原理:同时具备一些网络连接不通对应问题的排查能力.文本 ...

  9. 细说show slave status参数详解(最全)【转】

    在搭建好mysql主从之后,我们一般在从库上通过命令 show slave status\G 来查看主从的状态,会有很多的参数,接下来笔者就带大家好好的了解这些参数 root@localhost (n ...

  10. 谁说运维用ELK没用?我就说很有用,只是你之前不会用【转】

    1.安装JDK 1)登陆ORACLE官网 (http://www.oracle.com/technetwork/java/javase/downloads/index-jsp-138363.html ...