当前位置: 首页 > news >正文

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://blog.csdn.net/lqhbupt/article/details/7859034

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)/

相关文章:

  • Ubuntu系统监测工具
  • Ubuntu 12.04下安装OpenCV 2.4.2
  • 【OpenEXR】HDRITools的使用
  • Linux下的Make与Makefile
  • Ubuntu下进行Android开发的相关配置
  • 如何阅读不同格式的Ubuntu/Linux帮助文档
  • Ubuntu 中其他编程语言的使用
  • Ubuntu中如何修复GRUB2 Boot Loader
  • Ubuntu下的虚拟化KVM
  • 使用MeTriX MuX 1.1
  • 使用Endnote进行文献管理
  • GOOGLE学术检索技巧
  • MATLAB下的程序调试
  • SVM学习笔记(1)LIBSVM在matlab下的使用安装
  • SVM学习笔记(2)LIBSVM在python下的使用
  • 《Javascript数据结构和算法》笔记-「字典和散列表」
  • ECMAScript入门(七)--Module语法
  • es6
  • GitUp, 你不可错过的秀外慧中的git工具
  • Java 内存分配及垃圾回收机制初探
  • miniui datagrid 的客户端分页解决方案 - CS结合
  • Yii源码解读-服务定位器(Service Locator)
  • 复杂数据处理
  • 来,膜拜下android roadmap,强大的执行力
  • 七牛云 DV OV EV SSL 证书上线,限时折扣低至 6.75 折!
  • 前端 CSS : 5# 纯 CSS 实现24小时超市
  • 前端之React实战:创建跨平台的项目架构
  • 前端之Sass/Scss实战笔记
  • 深度解析利用ES6进行Promise封装总结
  • 实现简单的正则表达式引擎
  • 曜石科技宣布获得千万级天使轮投资,全方面布局电竞产业链 ...
  • #我与Java虚拟机的故事#连载16:打开Java世界大门的钥匙
  • (DenseNet)Densely Connected Convolutional Networks--Gao Huang
  • (LeetCode 49)Anagrams
  • (react踩过的坑)antd 如何同时获取一个select 的value和 label值
  • (二)JAVA使用POI操作excel
  • (附源码)spring boot校园健康监测管理系统 毕业设计 151047
  • (附源码)springboot社区居家养老互助服务管理平台 毕业设计 062027
  • (论文阅读30/100)Convolutional Pose Machines
  • (切换多语言)vantUI+vue-i18n进行国际化配置及新增没有的语言包
  • (原創) 如何動態建立二維陣列(多維陣列)? (.NET) (C#)
  • (转)关于pipe()的详细解析
  • * 论文笔记 【Wide Deep Learning for Recommender Systems】
  • ./configure,make,make install的作用(转)
  • .net core MVC 通过 Filters 过滤器拦截请求及响应内容
  • .NET core 自定义过滤器 Filter 实现webapi RestFul 统一接口数据返回格式
  • .net 按比例显示图片的缩略图
  • .NET框架设计—常被忽视的C#设计技巧
  • /bin/rm: 参数列表过长"的解决办法
  • @31省区市高考时间表来了,祝考试成功
  • @require_PUTNameError: name ‘require_PUT‘ is not defined 解决方法
  • [android] 练习PopupWindow实现对话框
  • [ASP.NET MVC]Ajax与CustomErrors的尴尬
  • [BIZ] - 1.金融交易系统特点
  • [BZOJ4016][FJOI2014]最短路径树问题