我已经问过几个有关VBO的问题,并且从我收到的评论中我决定必须采取新的方法。使用CUDA VBO的OpenGL高度图绘制
简而言之 - 我试图绘制一个大的FLOAT数组上定义的Mandelbrot集,大约512X512点。我的程序的目的是让用户控制缩放和世界的方向(这是一个3D模型)。到目前为止我已经使用GL_TRIANGLE_STRIP绘制了整个事物,因为它的绘制过程很慢,所以变成了一个不好的选择。也因为实施我的绘画风格(调用glVertex的顺序)变得不可能为维也纳国际组织编码。
所以我有几个问题。
即使在此描述之后,我不确定VBO是否是最好的选择,因为它是用户控制计算的。对于他通过程序导致的每次计算,我必须重新计算mandelbrot集(~60ms ),并将这些点重新复制到缓冲区:一个需要一些时间(?ms)的进程。
该程序允许用户也可以在世界上移动,所以没有计算在这里完成,因此VBO是一个很好的选择。
1.什么是作画的高度图(当阵列中的每个单元只拥有高度)
2.how我可以把它在VBO并将其传输到CUDA(cudaRegisterBuffer或类似的东西,最好的办法)
3.是否有办法区分模式和决定何时需要VBO(在无计算模式下)以及何时不需要(计算模式)。
使用`glBegin/glEnd`,您也可以将每个帧的整个数据都复制到GPU,但是在这种情况下,每个顶点的系统调用都很重。所以是的,一个VBO总是正确的方式,更重要的是,如果计算是由CUDA完成的,在这种情况下绝对不需要将VBO数据复制到CPU。 – 2011-12-17 12:06:13