我的目标是根据其顺序为顶点着色

编辑:长时间目标:访问前一个和后面的顶点以模拟重力行为

我使用了以下代码

#version 120
#extension GL_EXT_geometry_shader4 : enable
void main( void ) {
    for( int i = 0 ; i < gl_VerticesIn ; i++ ) {
        gl_FrontColor = vec4(float(i)/float(gl_VerticesIn),0.0,0.0,1.0);
        gl_Position = gl_PositionIn[i];
        EmitVertex();
    }
}

但是所有顶点都是黑色的,似乎 一世 总是被评估为0,我是否缺少某些事情或做错了什么?

编辑:弄清楚元问题:如何将所有我的模型几何形状馈送到单几何着色器调用中,因此Mainloop在所有顶点上迭代,而不是每个三角形。

有帮助吗?

解决方案

您不允许单个几何设计着色器调用在所有顶点上迭代,而是每个原始原始的(点,线,三角形,...)都被调用。

解决方案要容易得多:在顶点着色器中(实际上是为每个顶点调用),您可以读取特殊变量 gl_VertexID, ,其中包含顶点索引。该索引要么只是每个顶点的计数器增量(如果使用 glDrawArrays)并通过每个绘制呼叫重置,或索引数组的索引(如果使用 glDrawElements).

编辑: 关于长期目标。不是直接,但您可能会使用 纹理缓冲区 为了那个原因。这基本上使您可以将直接线性阵列访问获得到缓冲对象(在您的情况下为顶点缓冲区),然后您可以使用此顶点索引索引。但是,也可能还有其他方法可以实现这一目标,这对于另一个问题可能就足够了。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top