2

我一直在使用内置顶点索引的 gl_VertexID 遇到问题,使用 传递in给 Three.js

我不确定为什么,因为文档说它适用于所有版本的 OpenGL

http://www.opengl.org/sdk/docs/manglsl/xhtml/gl_VertexID.xml

我正在使用这个顶点着色器:

        uniform int freqData[64];
        uniform int fftSize;

        in int gl_VertexID;

        void main() {
            vec3 norm = normalize(position);

            int modFFT = mod(gl_VertexID, fftSize);

            vec3 newPosition = norm * float(freqData[modFFT]);

            gl_Position = projectionMatrix * modelViewMatrix * vec4( newPosition, 1.0 );
        }

我收到的错误是:

ERROR: 0:68: 'in' : syntax error

声明似乎有问题in,并且没有抱怨其他任何事情(错误控制台能够检测到多个编译错误)。

非常感谢您的帮助,我正在使用昨天的 Three.js 构建。

4

2 回答 2

8

据我所知,在 WebGL 中您无法访问内置的顶点索引。

但是,您应该能够通过提供自己的自定义属性流来模拟这一点,并将其设置为与此类内置索引流等效的值。

在three.js 中还没有实现整数自定义属性,因此您需要使用float 属性。

在此示例中检查“位移”属性:

http://mrdoob.github.com/three.js/examples/webgl_custom_attributes.html

于 2012-07-25T22:34:22.467 回答
7

首先,不需要声明gl_VertexID;它要么存在(多亏了扩展,因为基于 OpenGL ES 2.0 构建的 WebGL 不提供此作为核心功能),要么不存在。

其次,基于OpenGL ES 2.0构建的WebGL,不使用inandout语法;这适用于桌面OpenGL 3.0 及更高版本。GLSL ES 使用较旧的attribute语法。因此,即使您需要声明gl_VertexID(同样,您不需要),您也需要将其称为 an attribute,而不是in.

于 2012-07-25T20:33:52.477 回答