2012-05-26 167 views
0

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

我正在开发/ for windows。

回答

2

你可以使用Win32API的

更新的基本油漆机制退房this Code Project article:OP要快拉,其中Win32API的不提供。 OP需要这样做,以便他们可以在优化过程中测量光线跟踪算法的加速。其他绘图的可能性有:DirectX,XNA,Allegro,OpenGL。

+0

带有paintpixel和双缓冲区的win32 api真的是最好的解决方案吗? – Knarf

+0

-1完全不足,速度明智。 –

+0

所以想想速度,最好的解决方案是什么? – Knarf

0

我在专业的实时CPU光线跟踪器上工作,从我在那里工作2年后所看到的,显示图像的GPU部分不会成为瓶颈,如果达到这个瓶颈,瓶颈将成为速度你的RAM,我不认为绘图技术会有什么显着的区别。作为一个例子,我们正在使用聚类(一个CPU是不够的:p),我们能够在1920x1080的时候渲染100-200帧,当看天空时,瓶颈不是显示部分,而是网络。编辑:我们使用OpenGL的显示。

当你在做一个CPU光线跟踪器时,你不会做printPixelToGPU(),但是你会写入你的RAM,然后一旦图像完成就发送给GPU。做printPixelToGPU()可能会造成很大的开销,并且(在我看来)是一个非常糟糕的设计选择。

它看起来像不成熟的优化。但是如果您仍然担心这一点,那么只需制作一张替代Open GPU,DirectX ...以及打印平均帧速率的GPU内存纹理图。你可能会看到帧率会非常高,所以除非你使用SDRAM或非常糟糕的GPU,否则你一定不会达到这个“瓶颈”。