WebGL更新动态网格

时间:2018-01-12 20:24:39

标签: javascript webgl rendering mesh

我有一组顶点(一个网格),每一帧都会更新,想象一朵花,它必须在屏幕上绘制。

我目前通过绑定Float32Array来渲染网格,Float32Array包含网格顶点,每个刻度线,因此缓冲区的每一帧都会上传到GPU。

有没有办法更新网格而无需重新上传缓冲区?每个框架包含添加的新点和保持不变的旧点,是否有“gl_pushVerticies”方法?

1 个答案:

答案 0 :(得分:1)

"每一帧都包含新点,旧点保持不变" **是这里的关键......

作为花朵的一部分'保持不变和新的'添加顶点,我将创建一个包含所有顶点(所有部分)的大顶点缓冲区(完整的花),并使用(例如)void gl.drawElements(mode, count, type, offset);

的计数部分绘制它

这样您就不需要操纵任何顶点缓冲区。

例如使用索引

// create the vertex buffer with all vertices (complete object)
// for example 56 vertices

帧1:

// instead of drawing the complete object, you draw only 24 vertices
gl.drawArrays(gl.TRIANGLES, 24, 0);

式2:

// instead of drawing the complete object, you draw only 48 vertices
gl.drawArrays(gl.TRIANGLES, 48, 0);

帧3:

// instead of drawing the complete object, you draw only 56 vertices
gl.drawArrays(gl.TRIANGLES, 56, 0);

等.....