WebGl之结构数组

来源:互联网 发布:最好的优化软件 编辑:程序博客网 时间:2024/04/28 11:07
             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,这里做个记录

0 0
原创粉丝点击