如何解决是否可以在openGL中在GPU上生成几何图形并直接用于渲染
我目前正在实施一种算法来从点云生成体素化网格。截至目前,我正在使用在 64x64x64 网格中生成的随机无符号。然后我正在运行一个算法,该算法为此类网格中的每个点检查邻居并查看它们是否透明 (0u
) 或不透明 (1u
) 并将面应用于当前体素如果那个方向的相邻体素是透明的。
类似的东西(真正的实现是在 3D 中)。
-0-
0x1
-1-
假设这是特定体素 (x) 的情况,在这种情况下,算法将在左侧和顶部放置一个面,因为这些位置的体素是透明的,但不是在底部和右侧,好像有如果面在那里,它们将被非透明体素隐藏。
到目前为止,我正在使用一个函数放置一个面,该函数接受两个数组的两个引用,第一个用于顶点(浮点数),第二个用于索引或元素(无符号整数),并将所需的数据添加到它们(4 个顶点和 6 个索引)。
由于这是一个非常简单的算法并且我认为它可以很好地并行运行,所以我正在考虑使用计算着色器来实现它来生成几何并将生成的向量传递给 CPU,但是由于生成的向量可能是非常大,我认为这不是一个好主意。
所以,我知道要渲染数据,您必须使用函数将数据从 CPU 传递到 GPU:
glBufferData(GL_ARRAY_BUFFER,sizeof(float) * m_Vertices.size(),&m_Vertices[0],GL_STATIC_DRAW);
在这种情况下,我将 std::vector
的浮点数传递给数组缓冲区,并且由于我还认为计算着色器中生成的数据在 GPU 上,我想知道是否有可能跳过将在计算着色器上生成的生成数组(或向量)传递给 CPU 然后返回 GPU 进行绘制的步骤,并直接告诉 OpenGL 使用特定的内存地址来获取要绘制的数据。
这样的事情是可能的还是我的推理有错误?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。