2

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

编辑:长期目标:访问前后顶点以模拟重力行为

我使用了以下代码

#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,我错过了什么或做错了吗?

编辑:解决了元问题:如何将所有模型几何图形输入单个几何着色器调用,因此主循环遍历所有顶点,而不是每个三角形。

4

1 回答 1

2

您不会让单个几何着色器调用迭代所有顶点,它会为每个原始图元(点、线、三角形......)调用。

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

编辑:关于长期目标。不是直接的,但您可以为此使用纹理缓冲区。这基本上使您能够直接线性数组访问缓冲区对象(在您的情况下为顶点缓冲区),然后您可以使用该顶点索引对其进行索引。但是可能还有其他方法可以实现这一点,这可能足以解决另一个问题。

于 2011-09-05T12:42:55.000 回答