首先,我知道显示列表在 OpenGL 3.0 中已被弃用并在 3.1 中被删除。但是我仍然必须在这个使用 OpenGL 2.1 的大学项目中使用它们。
我在显示列表上阅读的每篇文章或教程都将它们用于多次绘制的某种对象,例如树木。为单个对象创建一个列表有什么问题吗?
例如,我有一个建筑物的对象(.obj 格式)。这个特定的建筑只画了一次。对于基本性能分析,我在窗口标题栏上有当前的每秒帧数。
这样做:
glmDraw(objBuilding.model, GLM_SMOOTH | GLM_TEXTURE);
我得到大约 260 FPS。如果您不了解 GLM 库,则该glmDraw
函数基本上会进行大量glVertex
调用。
但是这样做:
glNewList(gameDisplayLists.building, GL_COMPILE);
glmDraw(objBuilding.model, GLM_SMOOTH | GLM_TEXTURE);
glEndList();
glCallList(gameDisplayLists.building);
我得到大约 420 FPS。当然,屏幕刷新率不会刷新那么快,但就像我说的,它只是衡量性能的一种简单而基本的方法。
它对我来说看起来好多了。
当我有一些重复多次的对象时,我也会使用显示列表,比如防御塔。同样,对单个对象执行此操作是否有任何问题,或者我可以继续执行此操作吗?