实时光线追踪器

Real time ray tracer

本文关键字:光线追踪 实时      更新时间:2023-10-16

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

我正在为窗口开发。

您可以查看这篇代码项目文章,了解如何使用 Win32API 的基本绘制机制

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

我正在专业研究实时 CPU 光线追踪器,从我在那里工作 2 年看到的情况来看,显示图像的 GPU 部分不会成为瓶颈,如果您达到瓶颈,瓶颈将是您的 RAM 的速度,我认为绘图技术不会产生任何显着差异。

例如,我们使用集群(一个 CPU 不够:p),我们能够在看天空时以 1920x1080 渲染 100-200fps,但瓶颈不是显示部分,而是网络......编辑:我们正在使用OpenGL进行显示。

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

看起来过早优化。但是,如果您仍然担心这一点,只需使用OpenGL,directX...进行多少RAM纹理到GPU传输,并打印平均帧速率。您可能会看到帧速率非常高,因此除非您使用的是SDRAM或非常差的GPU,否则您肯定永远不会达到该"瓶颈"。