【问题标题】:Real time ray tracer实时光线追踪器
【发布时间】:2012-05-26 16:36:50
【问题描述】:

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

我正在/为 windows 开发。

【问题讨论】:

    标签: c++ windows real-time raytracing


    【解决方案1】:

    您可以查看this Code Project article,了解使用 Win32API 的基本绘制机制

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

    【讨论】:

    • 带有paintpixel和双缓冲区的win32 api真的是最好的解决方案吗?
    • –1 完全不够,速度方面。
    • 那么考虑速度,最好的解决方案是什么?
    • Best 是相对的:这取决于您的需求。它的优点是它适用于所有 Windows 机器。还有其他解决方案:DirectX、Allegro、XNA——这些可能更快,但您确实需要特殊设置。光线追踪计算通常很慢,所以我认为快速绘图库对您没有太大帮助
    • 我不希望绘图成为瓶颈;因为我不想尝试优化光线追踪算法。
    【解决方案2】:

    我正在专业开发实时 CPU 光线追踪器,从我在那里工作 2 年的经验来看,显示图像的 GPU 部分不会成为瓶颈,如果你达到它的瓶颈将是速度您的 RAM,我认为绘图技术不会产生任何重大影响。

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

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

    看起来像是过早的优化。但是,如果您仍然对此感到担忧,只需做一个基准测试,看看您可以使用 OpenGL、directX... 将多少 RAM 纹理传输到 GPU,然后打印平均帧率。您可能会看到帧速率会非常高,因此除非您使用的是 SDRAM 或非常差的 GPU,否则您肯定永远不会达到那个“瓶颈”。

    【讨论】:

      猜你喜欢
      • 2013-04-07
      • 2011-10-03
      • 2021-04-30
      • 1970-01-01
      • 2015-02-05
      • 2011-09-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多