我有一组顶点(一个网格),每一帧都会更新,想象一朵花,它必须在屏幕上绘制。
我目前通过绑定Float32Array来渲染网格,Float32Array包含网格顶点,每个刻度线,因此缓冲区的每一帧都会上传到GPU。
有没有办法更新网格而无需重新上传缓冲区?每个框架包含添加的新点和保持不变的旧点,是否有“gl_pushVerticies”方法?
答案 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);
等.....