在WebGL顶点着色器中是否可以使用整数属性?我的顶点数据包含整数,我想这样定义顶点属性:
attribute vec3 POSITION;
attribute int INDEX[8];
attribute float WEIGHT[8];
如果这是可能的,那么我该如何使用gl.bufferData从JS将混合顶点数据传递给着色器?如果这不可能,那么实现相同结果的最佳方法是什么(从CPU传递索引到着色器并在着色器中将它们用作整数)?
WebGL不支持整数属性。除了规范中列出的一些例外情况(https://www.khronos.org/registry/webgl/specs/1.0/),WebGL使用与OpenGL ES 2.0大部分相同的GLSL特性集。
OpenGL ES着色语言1.00规范文档(这是用于ES 2.0的GLSL版本)在第30页第4.3.3节中写道:
属性限定符只能与数据类型float、vec2、vec3、vec4、mat2、mat3和mat4一起使用。属性变量不能声明为数组或结构体。
你最好的做法可能是简单地使用没有小数部分的浮点数。可以精确表示的值的范围将比使用相同存储空间的整数更有限。例如,16位浮点数(半精度浮点数)具有11个有效位,可以精确表示0到2048之间的整数。
attribute float
并将其转换为整数时才能使其工作,例如int(index[0])
。正如 AA 中所述,GL ES SL 2.0 不支持整数属性。 - user1300214