0

我目前正在一次绘制调用中绘制对象。每个对象只是一堆具有一个变换、一种颜色和一个顶点流的顶点:

uniform vec4 color;
uniform mat4 transform;
attribute vec3 vertex;

我想将多个对象批处理到一个绘图调用中,但我不知道如何发送颜色和变换。我是否应该将它们都变成每个顶点的属性,这会导致发送大量重复数据。有什么方法可以将所有颜色和变换发送到 gpu 上的数组,然后只为每个顶点传递一个颜色索引和变换索引,以便它可以检索该顶点的适当颜色和变换?

或者还有其他一些我想念的更优雅的解决方案吗?

4

1 回答 1

1

是的,你可以这么做。只需制作您的制服数组并添加一个索引属性:

uniform vec4 color[MAX_OBJECTS];
uniform mat4 transform[MAX_OBJECTS];
attribute vec3 vertex;
attribute float index;

为您的平台适当MAX_OBJECTS定义的位置。如果您的平台具有有限的统一空间(例如移动 gpu),您可能希望将颜色存储在顶点缓冲区中。

于 2013-06-11T13:04:29.173 回答