【发布时间】:2012-01-22 13:09:48
【问题描述】:
我之前在这里问过几个关于 VBO 的问题,从我收到的 cmets 中,我决定必须采取一种新的方法。
简单地说 - 我正在尝试绘制 Mandelbrot 集,它定义在一个大型 FLOAT 数组上,大约 512X512 点。我的程序的目的是让用户控制缩放和世界的方向(它是一个 3d 模型)。 到目前为止,我已经使用 GL_TRIANGLE_STRIP 绘制了整个东西,由于其缓慢的绘制过程,这变成了一个糟糕的选择。也因为实现我的绘画风格(调用 glVertex 的顺序)变得不可能为 VBO 编码。
所以我有几个问题。
即使在此描述之后,我也不确定 VBO 是否是最佳选择,因为由用户来控制计算。对于他由程序引起的每个计算,我都必须重新计算 mandelbrot 集(~60ms) ,并将这些点重新复制到缓冲区:一个需要一些时间(?ms)的过程。
该程序还允许用户在世界上移动,因此这里不进行任何计算,因此 VBO 是一个很好的选择。
1.绘制高度图的最佳方法是什么(当数组中的每个单元格只包含高度时)
2.如何将它应用到 VBO 并将其传输到 cuda(cudaRegisterBuffer 或类似的东西)
3.有没有办法区分模式并决定何时需要 VBO(在无计算模式下)和何时不需要(计算模式)。
【问题讨论】:
-
使用
glBegin/glEnd,您也在每帧将整个数据复制到GPU,但在这种情况下,每个单独的顶点都需要大量的系统调用。所以是的,VBO 始终是正确的方法,如果计算由 CUDA 完成,则更是如此,在这种情况下,绝对不需要将 VBO 数据复制到 CPU。
标签: opengl cuda vbo mandelbrot heightmap