我尝试使用OpenCL创建实时光线跟踪器。我想提供一个选项,在OpenGL中创建类似于VBO的东西,然后使用不同的转换,材质等渲染它们。为了实现这一点,我需要存储这些数据并添加新模型。在思考了很多之后,我决定组织这样的事情:所有模型都有一个缓冲区(global char*)
每个模型都是此缓冲区的一部分,由球体,三角形和纹理坐标组成(如果纹理不是,则它们的计数为0需要)。
当我们想在主机上创建模型时,我们使用适当的偏移调用clEnqueueWriteBuffer
。
现在,当我们想要渲染场景时,我们填充另一个名为“渲染列表”的缓冲区。此缓冲区的每个条目都包含指向模型的指针(模型数组中的偏移量),材料信息和转换(平移和旋转)。在每帧之前清除(或覆盖)渲染列表。
鉴于所有这些信息,我们现在能够在内核中渲染场景。但是这个解决方案看起来太乱了,太复杂了。
这是实现灵活光线跟踪器的好方法吗? OpenCL中是否有任何常见的做法可以做更好的事情?