簡體   English   中英

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

[英]If you can use an integer scale greater than 1 in WebGL/WebGL2

想知道是否可以在bufferData使用Uint32Array ,所以代替這個:

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不在乎。 它可以是浮點數,字節,整數,無符號字節,無符號整數,短褲,無符號短褲。 也可以混合使用。

您如何使用這些數據以及如何使用它取決於您自己。 該數據不必是位置數據。 它可以是法線,可以是顏色,可以是粒子的速度,可以是國家的標識,可以絕對是任何東西。

將數據放入緩沖區后,可以使用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 ,這意味着您將轉換數據並告訴該屬性提取到float中。 例如,如果您保持提取類型= gl.BYTE ,normalize = false,則屬性中的值將為-127.0到128.0如果您說提取類型gl.UNSIGNED_BYTE ,normalize = true則值將為0.0到1.0

WebGL2添加了整數屬性intivec2ivec3ivec4uintuvec2uvec3uvec4

要設置整數屬性,請調用gl.vertexAttribIPointer

我建議一些關於WebGL的教程

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM