减少冗余的webgl属性数据

减少冗余的webgl属性数据,webgl,Webgl,如果我想使用三角形绘制一个红色和蓝色的正方形,而不需要多次绘制调用,据我所知,形状顶点将有12个元素(有意义),但我还需要使用12个元素仅用于两种颜色,因为我需要为每个顶点定义一种颜色,对于一个形状使用的顶点越多,该颜色就呈指数冗余 有没有办法,比如说,跳过一个属性多少次,这样这些属性就排列在一起了 vertices = [0, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 1 1, 1, 1, 2, 2, 1, 2, 1, 1, 2, 2, 2] colo

如果我想使用三角形绘制一个红色和蓝色的正方形,而不需要多次绘制调用,据我所知,形状顶点将有12个元素(有意义),但我还需要使用12个元素仅用于两种颜色,因为我需要为每个顶点定义一种颜色,对于一个形状使用的顶点越多,该颜色就呈指数冗余

有没有办法,比如说,跳过一个属性多少次,这样这些属性就排列在一起了

vertices = [0, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 1
            1, 1, 1, 2, 2, 1, 2, 1, 1, 2, 2, 2]
colors   = [1, 0, 0, 1,
            0, 0, 1, 1]
因此,第一种颜色(颜色中的第一个vec4)应用于顶点中的前六个点,第二种颜色应用于接下来的六个点


这是可能的,还是我必须为形状中的每个顶点重新定义相同的颜色?

您所追求的最接近的东西是绘制实例:

否则,如果您确实希望不复制顶点,则可以使用制服:

uploadAttrDataForOneShape();
setUniform("color", RED);
draw();
setUniform("color", BLUE);
draw();

实际上,GPU上的内存非常丰富,可能不值得过分强调顶点冗余。

你所追求的最重要的东西是绘制实例:

否则,如果您确实希望不复制顶点,则可以使用制服:

uploadAttrDataForOneShape();
setUniform("color", RED);
draw();
setUniform("color", BLUE);
draw();

实际上,GPU上的内存非常丰富,可能不值得过分强调顶点冗余。

可能的重复实际上正是我要寻找的,尽管遗憾的是,它在WebGL实现中似乎不太一致。这正是我要寻找的,尽管令人遗憾的是,它在WebGL实现中似乎不太一致。