【发布时间】:2012-05-26 16:36:50
【问题描述】:
我想用 C++ 做一个基本的实时 CPU 光线追踪器(主要用于学习建议)。 This tutorial 非常适合制作基本的光线追踪器。但是在屏幕上实时绘制它的最佳解决方案是什么?我不是在问如何优化光线追踪部分,只是在绘画部分,以便它可以在屏幕上而不是在文件中绘画。
我正在/为 windows 开发。
【问题讨论】:
标签: c++ windows real-time raytracing
我想用 C++ 做一个基本的实时 CPU 光线追踪器(主要用于学习建议)。 This tutorial 非常适合制作基本的光线追踪器。但是在屏幕上实时绘制它的最佳解决方案是什么?我不是在问如何优化光线追踪部分,只是在绘画部分,以便它可以在屏幕上而不是在文件中绘画。
我正在/为 windows 开发。
【问题讨论】:
标签: c++ windows real-time raytracing
您可以查看this Code Project article,了解使用 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,否则您肯定永远不会达到那个“瓶颈”。
【讨论】: