假设我有一个类别描述场景中的模型的类(例如矩形)。该类包含,最重要的是模型矩阵和VAO。在我的渲染代码中设计绘图循环时,我现在进行以下(伪代码):
functon draw{
list = getListOfMeshes() /* List containing mesh class items */
iterate list { /* could be for example 1000 different models */
set model matrix uniform
bind VAO
draw elements
}
}
我知道,这可能仅对一个VAO调用进行优化:
functon draw{
bind VAO
draw elements
/* How to handle the uniforms that are different for each model?? */
}
一旦我在场景中获得了许多模型,此列表迭代就变成了瓶颈。是否有另一种设计此渲染循环的方法?
您将要创建一个模型接口。然后根据接口创建项目列表。所以
之类的东西<code>
class interface{
virtual render() = 0;
virtual setUniforms()=0;
};
class object : public interface{
render();
setUniforms();
};
</code>
通过这种方式,您可以通过所需的制服类型调用您使用的每个型号的设置制服功能。因此,需要正常地图的事物可以具有统一和其他需要其他制服的东西。所有实施的统一调用都将在setuniforms()的对象类实现中;而且由于它们是一个通用接口,因此循环和代码将对您传递到满足接口的列表中的每个对象执行正确的函数。
希望这会有所帮助:)