很想知道是否可以在Uint32Array
中使用bufferData
,所以代替这个:
gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(bufferData), gl.STATIC_DRAW);
就是这样:
gl.bufferData(gl.ARRAY_BUFFER, new Uint32Array(bufferData), gl.STATIC_DRAW);
沿着这条线我也看到了所有顶点示例,但它们在0到1范围内,例如0.5
之类。我想知道您是否可以改用较大的值,例如500或100000,并像这样设置刻度。因此,在这种情况下,请使用大浮点数或整数。
答案 0 :(得分:2)
您可以将所需的任何数据放入缓冲区。 WebGL不在乎。它可以是浮点数,字节,整数,无符号字节,无符号整数,短裤,无符号短裤。也可以混合。
如何使用这些数据以及如何使用它取决于您自己。该数据不必是位置数据。可以是法线,可以是颜色,可以是粒子的速度,可以是国家的标识,绝对可以是任何东西。
将数据放入缓冲区后,您可以使用gl.vertexAttribPointer
来告诉WebGL如何获取数据。
const location = specifies the attribute to set (looked up with gl.getAttribLocation)
const size = number of elements to pull out per vertex shader iteration (1 to 4)
const type = the type of data. gl.FLOAT, gl.BYTE, gl.UNSIGNED_BYTE, gl.SHORT, etc..
const normalize = true/false. True means the value represents 0 to 1
of unsigned types or -1 to 1 for signed types
const stride = number of bytes to skip per vertex shader iteration to get the next
data piece of data. 0 = use size * sizeof(type)
const offset = number of bytes to start into the buffer
gl.vertexAttribPointer(location, size, type, normalize, stride, offset);
请注意,WebGL1中的所有属性都是浮点类型。 float
,vec2
,vec3
,vec4
,mat3
或mat4
中的任何一个都意味着数据将被转换,并告诉属性提取变成一个浮动。例如,如果您保留提取类型= gl.BYTE
,normalize = false,则属性中的值将为-127.0到128.0如果您说提取类型gl.UNSIGNED_BYTE
,normalize = true,则值将为0.0至1.0
WebGL2添加整数属性int
,ivec2
,ivec3
,ivec4
,uint
,uvec2
,uvec3
,{ {1}}。
要设置整数属性,请致电uvec4