如果您可以在WebGL / WebGL2中使用大于1的整数比例

时间:2019-03-12 16:16:11

标签: javascript webgl

很想知道是否可以在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,并像这样设置刻度。因此,在这种情况下,请使用大浮点数或整数。

1 个答案:

答案 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中的所有属性都是浮点类型。 floatvec2vec3vec4mat3mat4中的任何一个都意味着数据将被转换,并告诉属性提取变成一个浮动。例如,如果您保留提取类型= gl.BYTE,normalize = false,则属性中的值将为-127.0到128.0如果您说提取类型gl.UNSIGNED_BYTE,normalize = true,则值将为0.0至1.0

WebGL2添加整数属性intivec2ivec3ivec4uintuvec2uvec3,{ {1}}。

要设置整数属性,请致电uvec4

I'd suggest some tutorials on WebGL