实时光线追踪器

时间:2012-05-26 16:36:50

标签: c++ windows real-time raytracing

我想在C ++中制作一个基本的实时CPU光线跟踪器(主要用于学习建议)。 This tutorial非常适合制作基本的光线追踪器。但是实时在屏幕上绘制这个的最佳解决方案是什么?我不是在询问如何优化光线跟踪部分,只是绘画部分,以便它在屏幕上而不是在文件中绘制。

我正在为Windows开发。

2 个答案:

答案 0 :(得分:2)

您可以使用Win32API

查看基本绘制机制的this Code Project article

更新:OP需要快速绘图,Win32API不提供。 OP需要这样,以便他们可以在优化过程中测量光线跟踪算法的加速。绘图的其他可能性有:DirectX,XNA,Allegro,OpenGL。

答案 1 :(得分:0)

我专业研发实时CPU光线跟踪器,从我在那里工作2年后所看到的,显示图像的GPU部分不会成为瓶颈,如果达到它就会遇到瓶颈作为你的RAM的速度,我不认为绘图技术会产生任何显着的差异。

作为一个例子,我们正在使用聚类(一个CPU是不够的:p),我们能够在看到天空时在1920x1080渲染100-200fps,但瓶颈不是显示部分,它是网络.. 。 编辑:我们正在使用OpenGL进行显示。

当您使用CPU光线跟踪器时,您不会执行printPixelToGPU(),但是您将写入RAM,然后在图像完成后将其发送到GPU。执行printPixelToGPU()可能会导致很大的开销,而且(在我看来)这是一个非常糟糕的设计选择。

看起来像是过早优化。但是,如果您仍然担心这一点,那么只需要使用OpenGL,directX ...来进行GPU传输多少RAM纹理,然后打印平均帧速率。你可能会看到帧率真的很高,所以你肯定永远不会达到那个"瓶颈"除非您使用的是SDRAM或非常糟糕的GPU。