变换反馈丢失了三角形网格的顺序
Transform Feedback lost order of triangle mesh
我正在尝试在顶点(或几何体(着色器中计算我的一些顶点。当我最终绘制顶点时,它们失去了我给顶点数组对象的顺序(带有GL_ELEMENT_ARRAY_BUFFER(。函数 glDrawElements 在这种情况下不起作用,相反,我必须使用 glDrawArrays。我错了吗?
如何保存转换反馈的三角形索引的顺序?
你没有错。顶点按照顶点(或几何图形(着色器的处理顺序写入转换反馈缓冲区。我看不出一个简单的解决方法。
这意味着如果要在捕获的缓冲区中绘制顶点,则将使用 glDrawArrays()
.或者在 GL 4.0 及更高版本中,您也可以使用 glDrawTransformFeedback()
.
如果您正在绘制索引,并且需要将顶点恢复到其原始顺序,则必须自己重新洗牌。如果您的索引缓冲区填充了数组 idxA
中的 n
个索引,输入缓冲区包含来自数组 inVertexA
的顶点,并且来自捕获缓冲区的顶点位于数组 capturedVertexA
中,则按原始顺序转换的顶点可以写入outVertexA
:
for (int k = 0; k < n; ++k) {
outVertexA[idxA[k]] = capturedVertexA[k];
}
只要绘图是基元类型 GL_TRIANGLES
,这将起作用。如果您使用类似 GL_TRIANGLE_STRIP
的东西绘制,索引逻辑会稍微复杂一些,因为变换反馈会产生单独的三角形。
我想你可以让 GPU 重新洗牌顶点,方法是再次通过转换反馈运行输出,并使用索引数组作为原始索引数组的反向映射。
无论如何,它看起来有点尴尬。您可能需要再次考虑您的用例,并确保确实需要按原始顺序恢复顶点。
免责声明:我从未使用过转换反馈,并且在驱动程序中实现/修复它的工作非常少。以上都是我通过阅读规范的理解。
- 使用对象文件读取三角形数据网格
- 如何从 3D 曲面网格中删除自相交三角形?
- 如何计算具有三角形面的网格的质心?
- 在开放网格中计算三角形的面积
- 三角形网格上的CGAL插值被卡住
- 使用 #CGAL 的 2D 网格的三角形角度
- 重建三角形网格中的所有边
- 如何累积三维三角形网格的边?用c语言计算网格边的算法
- 3D模型文件并从中创建三角形网格
- PhysX地形-Heightfield vs三角形网格
- 如何在现代 OpenGl 中选择网格的顶点或三角形(上面的 3.3)
- 变换反馈丢失了三角形网格的顺序
- 网格三角形上的复杂OpenMP并行化
- 从三角形网格中查找面
- Tetgen:从曲面的给定三角形开始,在不改变曲面连接性的情况下创建新网格
- C++OpenGL大型网格缺少三角形
- 尝试渲染三角形网格(c++)时崩溃
- 三角形网格和粒子的八叉树实现
- 计算三角形网格中的法线
- 使用 kinect 从点云生成三角形网格的算法