<script type="text/javascript"> </script> <script type="text/javascript" src="/pagead/show_ads.js"> </script> 因为工作的需要,在网上找了个使用GPU实现光线追踪的代码GPU RayTracer,GPU Shading是通过HLSL实现的,界面采用了wxwidget实现跨平台。虽然这个工程的代码是刚刚公布的,那时gpu的shading技术还没有像现在这样丰富,但作者通过GPU实现光线追踪的方法仍然值得借鉴。
这里介绍一下如何让它正常工作。
我用的是vs ,所以为了正常的编译,需要对代码作些修改。
1.首先自然是将下载的压缩包GPURT-1.1.0-alpha4-src.zip解压缩,这里;
2.然后直接打开sln文件,vs会对工程文件自动进行转换的;
3.先尝试对代码进行编译,会发现有些与vc不兼容造成的错误,比如“不允许缺省的函数返回值类型为整型”,“函数的参数缺乏相应类型”,“循环中的下标可以在for指令内定义”等,改起来也容易,没有定义的添加上定义,没用到的直接注释掉。
对于其中pow函数缺少整型参数下的重载问题,直接定义一个函数进行重载就行了。
floatpow(intx,inty)
...{
returnpow((float)x,(float)y);
}
4.现在基本上只剩下一些关于wxwidget的错误了。
从官方网站上下载新的开发包安装文件wxMSW-2.8.6-Setup.exe,安装好后从build/msw目录中用vs打开wx.dsp工程,相关的工程都会被自动转换和加载,然后选择Unicode Release版本进行编译,应该不会有什么问题。
编译好的文件都放在了lib/vc_lib目录下。
5.在vs中设置一下与wxwidget相关的路径,对Include而言,需要添加"wxWidgets-2.8.6/include"和“wxWidgets-2.8.6/include/msvc”两个路径,对于library而言,只需要添加“wxWidgets-2.8.6/lib/vc_lib”一个就可以了。
6.由于这个工程开发的比较早,所用的库名称有了写变化,所以需要对AGEX_LIBS.h文件中的一些库进行修改,主要的包括"d3dx9dt.lib"改为"d3dx9.lib",以及其它名称中包括"wxbase25"或"wxmsw25"的都改为"wxbase28"与"wxmsw25"
7.现在应该可以正常编译完成了。
我编译的是Release(GPU)版本,运行时的界面如下:
图一 控制界面
图二 渲染窗口
从【file/import 3ds】菜单中可以加载模型文件,并通过General属性页中的彩色按钮选择使用CPU或GPU进行渲染,下面的分别为使用CPU和GPU(D3D)渲染的效果,都采用了3次迭代运算
CPU的渲染效果
图三 CPU渲染效果
图四 GPU渲染效果
两个图效果差别不大,但是用CPU耗时两秒,而用我的gf7900则不到一秒钟就完成了,可见后者的效率更高,当然这个软件只能一帧一帧的独立渲染,对于运动场景的连续光线追踪而言,目前仍然是学术领域中一个热门但是困难的课题。
<script type="text/javascript"> </script> <script type="text/javascript" src="/pagead/show_ads.js"> </script>