gl.bindBuffer(gl.ARRAY_BUFFER, obj.mesh['ext']);
gl.vertexAttribPointer(evn['aVertexNormal'], 3, gl.FLOAT, false, (3+2)*4, part['offset']*4);
gl.vertexAttribPointer(evn['aTextureCoord'], 2, gl.FLOAT, false, (3+2)*4, (part['offset']+3)* 4);
gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, obj.mesh['indices']);
gl.drawElements(gl.TRIANGLES, part['total'], gl.UNSIGNED_SHORT, part['offset']*2);
在webgl中,使用缓冲结构数组时,纠结了好长一段时间,具体为
void vertexAttribPointer(GLuint indx, GLint size, GLenum type,
GLboolean normalized, GLsizei stride, GLintptr offset);
void drawElements(GLenum mode, GLsizei count, GLenum type, GLintptr offset);
第一个的stide 为步幅的意思,例如存储数据格式为 x y z u v, 那么应该是 (3+2)个数据* 每个数据占用的字节数(webgl中存储顶点一般用Float32Array = 32bit = 4byte):4
那么步幅应该为:(3+2)*4 = 20, 偏移同样也要按字节算,比较简单 offset *4 即可;
那为啥drawElements的offset要乘以2? 一般在建立缓冲的时候使用的是Uint16Array = 16bit = 2byte, OK,这里做个记录
本文探讨了在WebGL中使用缓冲结构数组时遇到的问题,重点解释了步幅(stride)的概念,如(x, y, z, u, v)数据格式下步幅为20,以及偏移量计算方式。同时提到了drawElements中offset乘以2的原因,与使用Uint16Array的字节大小相关。"
122171087,10640137,Spring事务传播属性详解与面试要点,"['java', '后端开发', 'Spring事务', '数据库事务']
1655

被折叠的 条评论
为什么被折叠?



