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版本.
首先,没有必要申报gl_VertexID; 它是否存在(由于扩展,因为基于OpenGL ES 2.0构建的WebGL不提供此作为核心功能),或者它不是.
其次,基于OpenGL ES 2.0构建的WebGL不使用in和out语法; 这是桌面 OpenGL 3.0及更高版本.GLSL ES使用较旧的attribute语法.因此,即使您需要声明gl_VertexID(并且您不需要),您也需要将其称为"而attribute不是" in.
据我所知,在WebGL中你无法访问内置的顶点索引.
但是,您应该能够通过提供自己的自定义属性流来模拟这一点,设置为与此类内置索引流等效的值.
在three.js中,还没有实现整数自定义属性,因此您需要使用float属性.
检查此示例中的"displacement"属性:
http://mrdoob.github.com/three.js/examples/webgl_custom_attributes.html
| 归档时间: |
|
| 查看次数: |
2302 次 |
| 最近记录: |