`
netalpha
  • 浏览: 81080 次
  • 性别: Icon_minigender_1
  • 来自: 江苏
社区版块
存档分类
最新评论

[转]使用pbrt 1.03遇到的问题和解决方法

    博客分类:
  • cg
阅读更多

版本1.03,在http://www.pbrt.org/downloads.php下载,目前是最新的,使用起来遇到了如下问题,可能以后还会更多。

 

1. 编译flex,bison脚本。这一步的确很烦,很多人都是卡在这一步就过不去了。这里详细解释一下。readme和很多教程上讲在windows下编译pbrt第一步要装cygwin。实际上只用到了flex和bison两个程序,这两个程序原本是linux下的程序,cygwin将他们移植到windows平台。这两个程序是生成处理pbrt脚本的代码。pbrt规定了自己的场景描述规则(虽然很像renderman的rib文件,但有的地方还是不同)。程序为了能够解析这个场景描述文件,如果我们一般人写这部分程序,估计就if...else...一大堆逐行判断了,这样写起来扩展性差,代码难懂,编写和调式起来都很麻烦。

作者使用了高级的工具,即flex词法分析和bison(或者叫yacc)语法分析。如果是计算机专业学习过《编译原理》并做过实验的话,我想应该知道这是什么东西。如果没学过,我想也没有必要搞清原理。总体来说就是就是写两个脚本文件pbrtlex.l和pbrtparse.y(见vs项目工程下core->Parse File),这两个文件是flex和bison自己的描述语言写成,它用来描述“场景描述规则”的。flex和bison通过这两个描述文件,直接生成pbrtlex.cpp,pbrtparse.cpp,pbrtparse.hpp这三个文件,他们就可以直接集成到系统中读取和分析pbrt场景描述文件了。所以如果没有装cygwin或者没有编译成功这三个文件,后面会报错说这三个文件找不到。对于大多数应用来说,没有必要修改场景描述规则,所以直接把这三个文件拿过来放到工程里用就行,编译好了一个/Files/gaoyuear/parsed_files.rar,可以直接下载用。这样用的话就不用flex和bison编译了,右键单机pbrtlex.l和pbrtparse.y,选择属性,Configuration选择All Configurations,右面Excluded from build选择Yes就可以了。

如果自己编译的话,生成出来的pbrtlex.cpp文件中还有一个错误,第764行将#include <unistd.h>注释掉,第1907行替换为b->yy_is_interactive = 0;就可以了。附件中的文件已经改过了。

 

 

 

安装步骤:

 

步骤一:下载/Files/gaoyuear/parsed_files.rar

 

步骤二:copy上面三个文件到pbrt-1.03\core

 

步骤三:进入VS2005(在pbrt-1.03\win32\Projects內任意点一个project文件),选core里面的Parser Files, 有pbrtlex.l跟pbrtparse.y这两个文件,分别在其文件名上右键,选excluded from build

步骤四:如果您用的是双核以上CPU,tools->options->projects and solutions->build and run中,maximum number of parallel project builds改成1。并且把zlib1d.dll,zlib1.dll这两个dll拷贝到你的release目录。

 

步骤五:编译,如果没有问题,会在pbrt-1.03\win32\Projects中多出release目录。

 

步骤六:设定环境变量:我的电脑->属性->高级->环境变量:新增加环境变量项:PBRT_SEARCHPATH,其内容是…\pbrt-1.03\win32\Projects\Release,再修改系统参数的path,后面加上目录…pbrt-1.03\win32\Projects\Release。

 

Done!

 

下面的内容没有翻译,因为需要Examples.zip文件,我自己没有,但是还是把它贴上,也许对有用的人能用到:

 

再來就可以测试一些sample scene. 举个例子, 去pbrt scene的目录下打 

pbrt balls.pbrt 

等pbrt render完后, 就会产生exr文件. 使用C:\pbrt-src-1.03\pbrt-1.03\win32\openexr-1.4.0-vs2005\bin中的exrdisplay去观看即可。

 

 

2. windows下只能使用vs2005编译。一开始,用vs2008编译出来后,一运行就报错。后来网上找到作者说vs2008有问题,得重新编译一些第三方库文件,并且还有可能导致速度慢很多。所以一定不能用vs2008来编译pbrt。

 

3. LookAt bug。

pbrt使用的是左手坐标系,对于熟悉opengl的人来说很痛苦,并且LookAt函数还有个bug,使我为了搞清它的坐标系统花费了很长时间。

默认的左手世界坐标系是(假定面对显示器),向前为+z,向右是+x,向上是+y。相机默认位于原点,面向+z。

左手坐标系里的向量叉乘(Cross)满足左手法则。

Rotate的角度满足左手法则,和书上P72. Figure2.10的图不符(书上是右手法则)。

LookAt函数的bug, P76页, transform.cpp 109行,应该是

 

Vector dir = Normalize(look - pos);

Vector right = Normalize(Cross(up, dir));

Vector newUp = Cross(dir, right);

 

原文把后两个叉乘的向量写反了。

 

 

 

 

 

安装好了PBRT之后,我一直在找如何使用它,但是没结果,问过赵老师之后,知道了是自己写脚本,格式为pbrt格式,赵老师给了一些网上的例子:

 

http://www.cse.ohio-state.edu/~parent/classes/782/labs/PBRT/pbrtscene.html

 

http://www.mpi-inf.mpg.de/~tongbo/pbrt/index.html

 

http://groups.google.com/group/pbrt/browse_thread/thread/892ccb44fcda5128

 

 

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/degree_37/archive/2008/11/05/3229619.aspx

分享到:
评论

相关推荐

    pbrt-1.03.rar_pbrt_pbrt pdf_pbrtparse.c_spotlight_真实感

    PBRT,非常好的学习真实感绘制的源代码

    pbrt-v3.zip

    开源社区为PBRT提供持续的支持和更新,用户可以在官方论坛或者GitHub上找到问题解答、教程和贡献代码的机会。 总之,PBRT-v3是一个强大的工具,它集成了最新的光线追踪和物理渲染技术,为开发者和研究人员提供了一...

    PBRT 文件加载和场景解析.pdf

    PBRT的源代码中大量使用了C++的现代特性,如模板、智能指针和STL容器,这些将在后续章节中详细讲解。掌握这些基础知识后,读者将更好地理解PBRT如何开始启动渲染过程,包括如何构建场景图、遍历图进行光线交互计算等...

    pbrt-v3.7z

    它使用了先进的算法,如蒙特卡洛方法和BVH(Bounding Volume Hierarchy)加速结构,来高效地查找光线与场景的交点,进而计算颜色贡献。这涉及到大量的数学和优化技巧,对理解和改进光线追踪算法有着重要的参考价值。...

    pbrt-src.zip_votez81_格子Boltzmann_渲染格子Boltzmann

    渲染格子Boltzmann”这个压缩包中,包含的是一个名为“pbrt-1.03”的源代码库,它很可能是一个基于物理的渲染引擎实现,可能由votez81贡献或改进,专注于利用格子Boltzmann方法来提升光线追踪的精确性和效率。...

    PBRT第二版3

    就是说,用物理学的原理搭建关于光和物质交互的模型,追求真实感是该类方法的首要任务。 交互式渲染(Interactive):为了高性能和低延迟而牺牲真实感的渲染。 非真实感的渲染(Nonphotorealistc)。这是为艺术的自由...

    PBRT第二版4

    就是说,用物理学的原理搭建关于光和物质交互的模型,追求真实感是该类方法的首要任务。 交互式渲染(Interactive):为了高性能和低延迟而牺牲真实感的渲染。 非真实感的渲染(Nonphotorealistc)。这是为艺术的自由...

    PBRT第二版1

    就是说,用物理学的原理搭建关于光和物质交互的模型,追求真实感是该类方法的首要任务。 交互式渲染(Interactive):为了高性能和低延迟而牺牲真实感的渲染。 非真实感的渲染(Nonphotorealistc)。这是为艺术的自由...

    pbrt-parser:PBRT文件格式的简单解析器

    特别是包含纯语法的和更高级的语义解析器(请参见下文) 可以从我能找到的几乎任何pbrt文件中解析原始(即ascii-)“。pbrt”文件。 附带支持将生成的pbrt场景图读写为二进制“ .pbf”格式(.pbf =二进制pbrt格式)...

    a20210409模拟问题解决3UAV1

    5. 数据集扩充技术:本文使用PBRT工具来扩充UAV图像数据集,这种方法可以在合理的时间内生成大量的图像数据,从而解决实际应用中数据不足的问题。 6. 模型评估方法:本文使用AP(Average Precision)指标来评估...

    pbrt-src-1.02.zip_pbrt_基于物理渲染

    这个名为“pbrt-src-1.02.zip_pbrt_基于物理渲染”的压缩包文件,包含了该系统的一个源代码版本及其相关资料,为学习者提供了深入理解PBR理论和实践的机会。 PBR的核心思想是通过精确的数学模型来模拟光的传播和...

    lightcuts-pbrt:Lightcuts 在 PBRT 中的实现

    ##Implementation 我们正在使用 pbrt-v2,它是我们从分叉出来的,它的 README 可以在 pbrt-README.txt 中找到。 ##Installation 克隆此存储库或下载源代码后,运行 make 在 src/ 文件夹中并生成二进制文件。 ##...

    pbrt-v3:pbrt的源代码,第三版“基于物理的渲染”中介绍的渲染器

    请参阅《 ,以获取有关如何检出和构建系统的更多信息,以及有关使用pbrt的各种其他信息。 如果您在pbrt中发现错误,请在报告该。 请将您在“基于物理的渲染”书中发现的任何错误报告给 。 注

    PBRT_2_全彩_非扫描_瘦身版

    PBRT即《Physically Based Rendering: From Theory to Implementation》,是一本由...此外,书中还介绍了光线追踪技术在实际渲染过程中的重要性和应用,让读者了解在设计和开发现代图形软件时所需的关键技术和方法。

    pbrt:基于pbrt-v3的光线跟踪器

    PBRT_FLOAT_AS_DOUBLE-使用64位浮点数(默认情况下为关闭) 例子: # build with 64-bit floats $ git clone https://github.com/IDragnev/pbrt.git $ cd pbrt $ mkdir build && cd build $ cmake -D PBRT_...

    Physically Based Image Synthesis (PBRT)

    在第2章“几何与变换”中,PBRT详细讨论了几何对象的基础知识,包括向量、点、法线和射线等核心概念。这些基础知识对于理解和实现渲染器至关重要。例如: - **向量**用于表示方向和长度。 - **点**用于定义空间中的...

    pbrt-v4:pbrt的源代码,在即将出版的第四版“基于物理的渲染:从理论到实现”一书中描述了光线跟踪器

    它尚未被广泛记录,但是,如果您熟悉pbrt的早期版本,则应该可以解决它。 我们希望该系统以当前的形式对某些人有用,并且现在可以发现当前实现中的所有错误,从而使我们能够在本书最终出版之前对其进行更正。 中了...

    闫l令琪计算机图形学作业_pbr_pbrt_

    4. **阴影和透明**:了解阴影计算方法,如硬阴影和软阴影,以及透明和半透明物体的渲染。 5. **纹理和贴图**:运用纹理和法线贴图增强表面细节,增加视觉深度和复杂性。 6. **相机模型**:学习如何设置和调整相机...

Global site tag (gtag.js) - Google Analytics