gpt4 book ai didi

performance - 在 OpenGL 中为单个对象使用显示列表有什么问题吗?

转载 作者:行者123 更新时间:2023-12-04 02:32:45 26 4
gpt4 key购买 nike

首先,我知道显示列表在 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。当然,屏幕刷新率不会刷新那么快,但就像我说的,它只是衡量性能的一种简单而基本的方法。

它对我来说看起来好多了。

当我有一些重复多次的对象时,我也会使用显示列表,比如防御塔。同样,对单个对象执行此操作是否有任何问题,或者我可以继续执行此操作吗?

最佳答案

为这些东西使用显示列表非常好,在顶点数组出现之前,它们是在快速内存中放置几何图形的事实标准。放置显示列表有一些有趣的陷阱。例如在 OpenGL-1.0 中没有纹理对象;而是将 glTexImage 调用放在显示列表中是模拟这一点的方法。而且这种行为仍然普遍存在,因此在显示列表中绑定(bind)纹理并调用 glTexImage 将有效地使用显示列表编译中所做的重新初始化纹理对象,无论何时调用显示列表。另一方面,显示列表不适用于顶点数组。

TL;DR:如果您的几何图形是静态的,您不希望随时转换到 OpenGL-3 核心,它会给您带来巨大的性能提升(就像它为您所做的那样),那么就使用它们吧!

关于performance - 在 OpenGL 中为单个对象使用显示列表有什么问题吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6050941/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com