【发布时间】:2011-04-13 04:59:32
【问题描述】:
我正在编写一个基于 OpenGL 的简单 3D 引擎(我知道那里有很多,但出于某些原因,我想自己学习如何做)。我对我目前的场景图方法和类似的东西非常满意,但我对纹理处理非常不满意。所以我想知道如何正确地做到这一点。
当我查看互联网上的示例代码时,他们从不谈论如何管理纹理。他们只是在应用程序启动时加载一些纹理,显示他们的演示内容,然后程序退出。但是如果我经常改变场景中的东西怎么办?如果我想显示一个具有 10 个纹理的场景,然后我删除场景中的一个节点以便不再需要 2 个纹理,然后我添加一个具有 4 个新纹理的新节点,该怎么办?所以必须从视频 RAM 中删除 2 个旧纹理,我必须添加 4 个新纹理。然后我完全替换了整个场景,因此必须再次删除所有未使用的纹理,并且必须加载新的纹理,而必须重新使用之前使用过的并且也在新场景中使用的纹理。这听起来很复杂。
如何在专业 3D 引擎中管理纹理?它是一个全局单例纹理管理器,它使用引用计数器跟踪纹理使用情况并不时清理视频内存吗?还是有更天才的方法来做到这一点?
【问题讨论】: