感谢支持
我们一直在努力

Windows下编译安装PBRT V1.05

由于要用到网上的一个插件。虽然现在PBRT已经出了V2版本。仍然需要编译下PBRTV1版本。V1的各个版本功能相似,只是不断的修正BUGS的过程。因此选择了V1的最后一个版本PBRTV 1.05。


1)首先从官网上下载:


pbrt-src-1.05.zip, for Windows (620kB)


2)将文件解压到目录


c:\pbrt-v1


3)在Windows下编译OpenEXR 见http://www.linuxidc.com/Linux/2012-08/68605.htm


4)先编译项目core。通过后再编译其他项目


在目录C:\pbrt-v1\pbrt-1.05\win32下打开pbrt.sln


4.1)将配置属性设置为All Configurations。


项目属性->Configuration Properties->General->IntermediateDirectory设置为../tmp/$(ProjectName)/


Output Directory设置为../../bin


4.2) 在core项目的属性里VC++Directories中的Include Directories中加入:C:\Deploy\include


core项目右键->Properties->Linker->General->AdditionalLibrary Directories改为C:\Deploy\lib\Win32\Release


4.3)由于我用的是ZLIB-1.2.5版本,其对应的dll和lib分别为zlibwapi.dll和zlibwapi.lib


将core右键->Properties->Linker->AdditionalDependecies,将其改为:


Half.lib


Iex.lib


IlmImf.lib


Imath.lib


zlibwapi.lib


IlmThread.lib


4.4)在core目录下新建文件unistd.h。内容如下:


#ifndef _UNISTD_H  


#define _UNISTD_H  


#include <io.h> 


#include <process.h> 


#endif /* _UNISTD_H */


4.5) 在core右键->Properties->C/C++->Preprocessor->PreprocessorDefinition部分加入OPENEXR_DLL


4.6) 在core/exrio.cpp文件中,注释掉


#define hypotf hypot


4.7)编译core项目成功


4.8) 将renderer右键->Properties->Build Events->Post-BuildEvent中的zlib1.dll换成zlibwapi.dll。并将zlibwapi.dll放在解决方案目录下,即win32/目录下。


4.9)修改所有项目的Output Directory为../../bin。


Intermediate Directory为../tmp/$(ProjectName)/


4.10)Build整个解决方案。


 


5)需要把C:\Deploy\bin\Win32\Release中的所有dll文件拷贝到C:\pbrt-v1\pbrt-1.05\bin中,并设定系统变量PBRT_SEARCHPATH指向C:\pbrt-v1\pbrt-1.05\bin


下载一个测试用的 pbrt 脚本文件,再写个批处理脚本 pbrt.cmd,都放到PBRT 文件夹下的 \scenes 文件夹下,来测试下pbrt 程序吧,批处理脚本如下:


SET PATH=%PATH%;%PBRT_SEARCHPATH%


pbrt.exe sharp.pbrt


“..\…\bin\exrdisplay.exe” sharp.exr


 


遇到问题及解决方案:


1)c:\pbrt-v1\pbrt-1.05\core\exrio.cpp(29):fatal error C1083: Cannot open include file: ‘ImfInputFile.h’: No such file ordirectory


在core项目的属性里VC++Directories中的Include Directories中加入:C:\Deploy\include


2)c:\pbrt-v1\pbrt-1.05\core\pbrtlex.cpp(771):fatal error C1083: Cannot open include file: ‘unistd.h’: No such file ordirectory


在core目录下新建文件unistd.h。内容如下:


#ifndef _UNISTD_H  


#define _UNISTD_H  


#include <io.h> 


#include <process.h> 


#endif /* _UNISTD_H */


3)c:\program files(x86)\microsoft visual studio 10.0\vc\include\math.h(167): error C2733: secondC linkage of overloaded function ‘hypot’ not allowed


解决方法,在exrio.cpp文件中,注释掉


#define hypotf hypot


4)将core项目右键->Properties->Linker->General->AdditionalLibrary Directories改为C:\Deploy\lib\Win32\Release


5)由于我用的是ZLIB-1.2.5版本,其对应的dll和lib分别为zlibwapi.dll和zlibwapi.lib


将core右键->Properties->Linker->AdditionalDependecies,将其改为:


Half.lib


Iex.lib


IlmImf.lib


Imath.lib


zlibwapi.lib


IlmThread.lib


6)1>exrio.obj : errorLNK2001: unresolved external symbol “private: static union half::uif const* const half::_toFloat” (?_toFloat@half@@0QBTuif@1@B)


1>exrio.obj : error LNK2001: unresolved external symbol”private: static unsigned short const * const half::_eLut”(?_eLut@half@@0QBGB)


解决方案:在core右键->Properties->C/C++->Preprocessor->PreprocessorDefinition部分加入OPENEXR_DLL


7)C:\Program Files(x86)\MSBuild\Microsoft.Cpp\v4.0\Platforms\Win32\Microsoft.Cpp.Win32.Targets(392,5):error MSB6003: The specified task executable “link.exe” could not berun. The process cannot access the file’C:\pbrt-v1\pbrt-1.05\win32\Projects\Debug\link.read.1.tlog’ because it is beingused by another process.


原因:多个项目将tlog文件输出到同一目录,导致冲突。


解决方法:发现所有项目的IntermediateDirectory指定到不同的目录。项目属性->ConfigurationProperties->General->Intermediate Directory。原来为Debug\,将其改为../tmp/$(ProjectName)/

赞(0) 打赏
转载请注明出处:服务器评测 » Windows下编译安装PBRT V1.05
分享到: 更多 (0)

听说打赏我的人,都进福布斯排行榜啦!

支付宝扫一扫打赏

微信扫一扫打赏