1

假设我有一个描述场景中模型的类(例如矩形)。此类包含最重要的模型矩阵和 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?? */
}

一旦我在我的场景中获得了许多模型,这个列表迭代就会成为一个瓶颈。有没有另一种方法来设计这个渲染循环?

4

1 回答 1

-1

您将要创建一个模型界面。然后根据界面创建一个项目列表。所以像

<code>
class interface{
    virtual render() = 0;
    virtual setUniforms()=0;
};

class object : public interface{
    render();
    setUniforms();
};
</code>

通过这种方式,您可以根据要调用的制服类型为您正在使用的每个模型调用 set uniforms 函数。所以需要法线贴图的东西可以有那个制服,而其他需要其他制服的东西可以有那些。所有实现的统一调用都将在 setUniforms() 的对象类实现中;并且由于它们是通用接口,循环和代码将为您传递到满足接口的列表中的每个对象执行适当的功能。

希望这可以帮助 :)

于 2012-10-26T16:19:43.073 回答