当前位置: 首页 > 工具软件 > LuxRender > 使用案例 >

编译luxrender源代码

衡泰
2023-12-01

引言:

      又有快小半年没有更新我的博客了,这次记录下我编译LuxRender的过程吧,这东西基本上是我至今为止编译过的最麻烦的东西。这篇博文里面介绍了编译LuxRender的最基本过程,在windows下进行编译。由于LuxRender用了多个三方库,所以本文会涉及到boost、freeimage、openexr的编译过程,其中有很多需要修改才可以编译的过程。

 

正文:

首先介绍下LuxRender是啥东西吧,简单的说,LuxRender是一个图形渲染器,类似于RenderMan,VRay等。不过是完全开源的,所以可以得到LuxRender的所有源代码。这个引擎支持很多特效,例如基于物理的渲染、网络渲染等等。这里我就不多介绍了,有兴趣的朋友可以去官网看看http://www.luxrender.net/

       下面开始介绍下编译LuxRender核心源代码的流程吧(这个过程蛮繁琐的,请耐心跟上每一步,否则很容易出问题。)

       首先,我们需要下载以下的软件:

  1. LuxRender Source Code. http://src.luxrender.net/
  2. FreeImage http://sourceforge.net/projects/freeimage/
  3. boost http://sourceforge.net/projects/boost/files/boost/1.43.0/
  4. wxWidgets 2.8.8 http://prdownloads.sourceforge.net/wxwindows/wxWidgets-2.8.8.zip
  5. openexr 1.4.0 http://www.openexr.com/downloads.html
  6. bzip2-1.0.5 http://www.bzip.org/downloads.html
  7. Visual Studio. ……

       大概是以上的东西了,其中boost、FreeImage、wxWidgets是要自己build的。下面我们一个一个来说吧:

       先build FreeImage吧,首先找到FreeImage.h文件,然后找到61行,大概是这样的代码

    #define DLL_CALLCONV __stdcall

     把上述代码改成

    #define DLL_CALLCONV __cdecl

       然后再进行编译,基本上应该没啥大问题,这东西编译起来很简单。

       然后是boost,很多场合我们要build boost,现在来看看这东西怎么搞。首先运行boost根目录下的bootstrap.bat,然后会生成一个bjam的文件,运行这个文件,大部分的文件就都生成出来了。不过有两个文件是我们需要的(libboost_bzip2-vc90-mt.lib libboost_zlib-vc90-mt.lib),而在windows下编译,boost默认是不编译的,因为boost用了zlib和bzip两个三方库来进行编译的。所以我们要手动把这两个文件生成出来,从上述地址把软件下来,然后解压到某地。运行下述命令:

     bjam -sZLIB_SOURCE=ZLIB_PATH -sBZIP2_SOURCE=BZIP_PATH --toolset=msvc address-model=32 --with-iostreams stage

      这里面我们要为boost制定zlib和bzip的位置,其中bzip就是解压的地址了,而zlib在freeimage中的source文件夹中(例如 D:/LUXRender/FreeImage/Source/ZLib)。然后我们会看到生成了如下输出

...updating 2 targets...
ln-NT stage/lib/libboost_zlib-vc90-mt.lib
"NT symlinks not supported yet, making copy"
        1 file(s) copied.
ln-NT stage/lib/libboost_bzip2-vc90-mt.lib
"NT symlinks not supported yet, making copy"
        1 file(s) copied.
...updated 2 targets...

    从而生成了lux需要的另外两个lib文件。

      接下来,我们需要build wxWidgets 2.8.8。打开wxWidgets/build/msw/wx.dsw,然后需要修改下源代码,wxWidgets-2.8.8/lib/vc_lib/msw/wx/setup.h中的宏定义wxUSE_GLCANVAS改成1,这里默认值是0。然后就可以build了,这个应该也不难。

      之后要build openexr了,这个库我们是不需要全部build的。只build中间一部分就可以了,Half、lex、IlmImf、IImThread、和Imath。其中IlmImf的编译需要zlib的,所以需要在其中加入FreeImage/Source/ZLib的路径。

       上面我们搞定了四个三方库的编译,然后就可以build我们最终的luxrender了。不过我们需要先设置一些系统环境变量,分别是LUX_X86_BOOST_ROOT,LUX_X86_FREEIMAGE_ROOT,LUX_X86_OPENEXR_ROOT,分别设置成boost,freeimage,openexr的根目录。

http://src.luxrender.net/ ,在这个地址里面,下载lux和windows两个zip文件,然后解压到同一级目录下。打开windows项目中解压的文件夹,里面有个.sln文件。然后就可以编译了,应该会有一些头文件找不到,因为项目不清楚这些路径,就一一加上好了。编译成功后,是没办法link成功的,因为lib找不到,同样加入lib路径。然后需要加入一下几个lib:

Half.lib
Iex.lib
IlmImf.lib
IlmThread.lib
Imath.lib
ws2_32.lib
comctl32.lib
OpenGL32.lib
libboost_date_time-vc90-mt.lib
libboost_filesystem-vc90-mt.lib
libboost_iostreams-vc90-mt.lib
libboost_program_options-vc90-mt.lib
libboost_regex-vc90-mt.lib
libboost_serialization-vc90-mt.lib
libboost_system-vc90-mt.lib
libboost_thread-vc90-mt.lib
libboost_bzip2-vc90-mt.lib
libboost_zlib-vc90-mt.lib
wxbase28.lib
wxjpeg.lib
wxpng.lib
wxtiff.lib
wxmsw28_core.lib
wxmsw28_aui.lib
wxmsw28_gl.lib
wxmsw28_adv.lib
freeimage.lib

       接下来就可以build成功了,在Projects/Win32/Release的里面会有一个luxrender.exe,这个就是luxrender的渲染器了。
       基本是上述的流程,建议所有的软件的版本与上面统一,这样麻烦会最小化。至于具体一些细节的问题,就得读者自己来分析了。

 类似资料: