WebGl之结构数组

本文探讨了在WebGL中使用缓冲结构数组时遇到的问题,重点解释了步幅(stride)的概念,如(x, y, z, u, v)数据格式下步幅为20,以及偏移量计算方式。同时提到了drawElements中offset乘以2的原因,与使用Uint16Array的字节大小相关。" 122171087,10640137,Spring事务传播属性详解与面试要点,"['java', '后端开发', 'Spring事务', '数据库事务']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

             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,这里做个记录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值