好的,我有一个呈现类,它具有程序其余部分调用的各种特殊函数:
这些函数中的每一个都可以分别调用glBegin/glEnd,我知道它可能非常低效率(甚至被废弃)。因此,无论如何,我计划对呈现器进行一次全面重写,我需要知道最有效的方法来设置函数,以便当调用它时,它会同时绘制它,或者它需要做的任何事情,这样它就可以高效地运行。(预先谢谢:)
发布于 2010-11-15 01:17:17
渲染的有效方法通常是使用VBO(顶点缓冲区对象)来存储顶点数据,但只有在呈现(主要是)静态数据时才真正有意义。
在不了解应用程序应该呈现什么的情况下,很难确定您应该如何构造它。但理想情况下,您不应该绘制单个原语,而是绘制顶点缓冲区的内容(子集)。
发布于 2010-11-15 01:15:59
最有效的方法就是根本不公开这种低层次的方法。相反,您要做的是构建一个场景图,它是一个包含整个场景的表示的数据结构。在“更新”方法中更新场景图,然后在“呈现”方法中一次渲染整个场景。
另一种稍微不同的方法是重新构建每个帧的整个场景图.这具有这样的优点:一旦场景图被合成,它就不会改变。因此,您可以在另一个线程上调用您的"render“方法,而您的"update”方法正在遍历并同时构造下一个帧的场景。
许多更先进的效果是根本不可能没有一个完整的场景图。您不能进行阴影映射,例如(这要求您从不同的角度多次渲染场景),您不能进行延迟渲染,它还会使任何依赖排序绘制顺序(例如α混合)的绘制变得非常困难。
从您的方法名称来看,它看起来像是在2D中工作,因此,虽然阴影映射在您的功能列表中可能并不高,但α混合延迟呈现可能是。
https://stackoverflow.com/questions/4180678
复制相似问题