当使用统一步幅时,可选择glMultiDrawArrays
Alternative to glMultiDrawArrays when using uniform stride?
Background:我正在开发一个应用程序,本质上是绘制一个巨大的3D图形的节点和边。节点被绘制为实例立方体,而边缘是用GL_LINE
绘制的,并用几何着色器扩展成由三角形带组成的3D体积"线"。目前,我每次重画边时都要执行这个扩展。然而,由于我的图形完全是静态的(节点不能移动,因此也不能边缘),我认为我只需要将GL_LINE
定义扩展到三角形带一次,将扩展的顶点捕获到缓冲区(使用变换反馈),然后从该点上使用GL_TRIANGLE_STRIP
的原始类型使用glMutliDrawArrays
捕获的顶点绘制边缘。
问题:我画的所有这些体积线都包含10个顶点。然而,glMultiDrawArrays
需要一个包含起始索引和计数大小的数组,这些数组本质上描述了每个原语的起始点和计数(以元素为单位)。由于我的原语大小都没有变化,我将创建一个看似不必要的起始索引列表&计数。是否有OpenGL提供的任何功能,将允许我简单地指定一个跨步(元素)在原始重启将发生?
没有这样的函数,但是对于您的需要,您不需要一个。变换反馈不能输出三角条。它只输出基本的原语:单独的点、线或三角形。这就是为什么glBeginTransformFeedback
只取GL_POINTS
、GL_LINES
或GL_TRIANGLES
。
你所要做的就是一次渲染所有的边缘,通过反馈将结果收集到一个缓冲区中,然后用一个调用glDrawArrays
来渲染整个东西。
相关文章:
- 维护unordered_map但同时每一步都需要最低的映射值
- 如何在最后一步使用CryptDecrypt解决NTE_BAD_DATA
- 如何在 C++ 中返回到上一步
- 如何一步一步地正确解释此代码?(编程新手)
- 通过GL_FLOAT,GL_UNSIGNED_INT一步
- 将隐式促销添加到复杂类,最后一步
- 如何在Linux / Windows操作系统上使用文件*.cpp一步编译下面的代码
- 检查下一步是检查员
- 改进malloc()算法的下一步是什么
- 如何在c++骰子游戏中存储第一个值,并在下一步进行比较
- 如何一步一步地遍历目录树
- 有没有一个调试器可以让我在代码中后退一步
- 若在下一步中对象被破坏,为什么不自动移动呢
- 第4章 斯特劳斯特鲁普钻头一个具有挑战性的一步(至少对我来说!
- 一步一步寻找选择排序大θ符号的过程
- 两步到一步的初始化和错误处理
- 带有下一步/后退按钮的Qt对话框/小部件
- 无法理解此代码的最后一步
- 只有当我在 c++ 中按 Enter 键(线程)时,代码如何进入下一步
- 离散傅立叶变换C++-下一步要做什么