我想用 C++ 制作一个基本的实时 CPU 光线追踪器(主要用于学习建议)。本教程非常适合制作基本的光线追踪器。但是在屏幕上实时绘制它的最佳解决方案是什么?我不是在问如何优化光线追踪部分,只是在绘画部分,以便它可以在屏幕上而不是在文件中绘画。
我正在/为 Windows 开发。
我想用 C++ 制作一个基本的实时 CPU 光线追踪器(主要用于学习建议)。本教程非常适合制作基本的光线追踪器。但是在屏幕上实时绘制它的最佳解决方案是什么?我不是在问如何优化光线追踪部分,只是在绘画部分,以便它可以在屏幕上而不是在文件中绘画。
我正在/为 Windows 开发。
您可以查看这篇关于使用 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,否则您肯定永远不会达到那个“瓶颈”。