转载请注明出处: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. python 操作PPT练习

    from pptx import Presentation from pptx.util import Pt, Inches prs = Presentation() slide = prs.slid ...

  2. 获取Spring的ApplicationContext的几种方式

    Application Context定义 简单来说就是Spring中的高级容器,可以获取容器中的各种bean组件,注册监听事件,加载资源文件等功能. 具体定义可以参考官网:https://sprin ...

  3. 【LIbreOJ】#6256. 「CodePlus 2017 12 月赛」可做题1

    [题意]定义一个n阶正方形矩阵为“巧妙的”当且仅当:任意选择其中n个不同行列的数字之和相同. 给定n*m的矩阵,T次询问以(x,y)为左上角的k阶矩阵是否巧妙.n,m<=500,T<=10 ...

  4. 20155117王震宇 2006-2007-2 《Java程序设计》第5周学习总结

    教材学习内容总结 try & catch java中的错误会被打包成对象,可以尝试(try)捕捉(catch)代表错误的对象后做一些处理.如果发生错误,会跳到catch的区块并执行. 异常结构 ...

  5. 【leetcode 简单】第十七题 x 的平方根

    实现 int sqrt(int x) 函数. 计算并返回 x 的平方根,其中 x 是非负整数. 由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去. 示例 1: 输入: 4 输出: 2 示例 ...

  6. apache2启动失败(Failed to start The Apache HTTP Server.)解决方案

    不知道如何启动apache2就启动不来了. 如下图所示: 即使卸载了重新装也是如此 经过测试卸载并清除软件包的配置即可解决 sudo apt-get purge apache2  sudo apt-g ...

  7. Java八种基本类型

    boolean 二进制位: true ,false   byte 二进制位:8 -128 - 127   -2的7次方到2的7次方-1 char 二进制位:16 0 - 65535   short 二 ...

  8. linux删除第几天日志【原创】

    cat del.sh #!/bin/bash thirty=`date -d '30days ago' +%Y-%m-%d` cd $ #删除输入路径下第30天的日志文件 find . -name & ...

  9. pip安装使用详解【转】

    转自:pip安装使用详解 – 运维生存时间http://www.ttlsa.com/python/how-to-install-and-use-pip-ttlsa/ pip类似RedHat里面的yum ...

  10. fullpage.js 具体使用方法

    1.fullpage.js  下载地址 https://github.com/alvarotrigo/fullPage.js 2.fullPage.js 是一个基于 jQuery 的插件,它能够很方便 ...