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

Javascript 如果可以在WebGL/WebGL2中使用大于1的整数比例,javascript,webgl,Javascript,Webgl,想知道您是否可以在缓冲数据中使用uint32阵列,因此请不要使用此选项: 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等等。我想知道你是否可以改为使

想知道您是否可以在
缓冲数据
中使用
uint32阵列
,因此请不要使用此选项:

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,并将刻度设置为那样。因此,在这种情况下,可以使用大浮点或整数。

您可以将任何需要的数据放入缓冲区。WebGL不在乎。它可以是浮点、字节、整数、无符号字节、无符号整数、短字符、无符号短字符。它也可以是混合的

如何使用这些数据以及使用这些数据的目的取决于您。该数据不必是位置数据。它可以是法线,可以是颜色,可以是粒子的速度,可以是国家的ID,可以是任何东西

将数据放入缓冲区后,您可以使用
gl.vertexattributepointer
告诉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
,这意味着数据将从属性转换为float。例如,如果您保持extract type=
gl.BYTE
,normalize=false,则属性中的值将为-127.0到128.0如果您说extract type
gl.UNSIGNED_BYTE
,normalize=true,则值将为0.0到1.0

WebGL2添加整数属性
int
ivec2
ivec3
ivec4
uint
uvec2
uvec3
uvec4

要设置您调用的整数属性,请调用
gl.vertexattributeinter


当然,您可以对顶点坐标使用“浮动”的整个范围。但请注意,最后的坐标必须是标准化的设备空间,其范围为[-1,1]。因此,您需要一个投影矩阵,它可以正确地将视图空间坐标转换为剪辑空间,而不需要投影矩阵,缓冲区中的数据也不必与顶点坐标有任何关系。缓冲区中的内容取决于您,如何使用缓冲区取决于您,是否使用缓冲区生成顶点坐标也取决于您。