在int gl_VertexID中导致three.js错误

Ale*_*lex 2 glsl webgl three.js

我一直在使用内置顶点索引的ingl_VertexID 遇到麻烦,使用它来传递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 );
        }
Run Code Online (Sandbox Code Playgroud)

我收到的错误是:

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

它似乎与in声明有问题,它不会抱怨其他任何事情(错误控制台能够检测到多个编译错误).

我非常感谢你的帮助,我正在使用昨天的Three.js版本.

Nic*_*las 7

首先,没有必要申报gl_VertexID; 它是否存在(由于扩展,因为基于OpenGL ES 2.0构建的WebGL不提供此作为核心功能),或者它不是.

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


alt*_*edq 7

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

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

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

检查此示例中的"displacement"属性:

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