【发布时间】:2020-01-10 14:51:55
【问题描述】:
是将顶点分组为单独的 glDrawElements(GL_TRIANGLES, ...) 和 glDrawElements(GL_QUADS, ...) 绘制调用的唯一解决方案,还是有一种方法可以将描述多边形边数的数据发送到几何着色器并排序类型几何着色器内的多边形? https://i.stack.imgur.com/4Ee4e.jpg 你看到的我的输出控制台是我的网格结构的输出。我有:
vector <float> vert_data;
unsigned int faces_no;
vector <unsigned int> indices_on_face;
vector <unsigned int> indices;
第一个基本上是发送到 open-gl 缓冲区的内容:坐标、法线、颜色等。第二个表示该数据中描述了多少面。第三个表示多边形中的顶点数。它按顺序进行。第四个是索引(glBufferData(GL_ELEMENT_ARRAY_BUFFER,...))。所以基本上我正在寻找一种将第三个发送到几何着色器的方法。 我知道可以在从 assimp 导入时使用标志来排序面部类型,但这会丢失面部顺序。并且仍然不允许我使用单个绘图调用绘制所有内容,因此我必须为每种类型的多边形创建一堆绘图函数:( 也许有可能是这样的:首先通过添加所有以前的索引来更改每个indices_on_face[i]。设置在绘图调用期间在几何着色器中绘制的第一个垂直编号。内部几何着色器将当前顶点数与 indices_on_face[i] 进行比较,这将告诉何时从顶点生成多边形。 gl_VertexID 是否持有依赖于传递顶点计数的数字,独立于索引? 如何制定适合它的绘图调用?
【问题讨论】:
标签: c++ opengl glsl glfw assimp