0

我正在阅读 Nehe OpenGL 教程,并且有一个关于显示列表的教程。是否有任何理由使用它而不是“类和对象”方式?例如创建立方体类,然后只需简单地编写 cube.render(x, y, z); ?

4

3 回答 3

3

这个想法是利用带有板载显示列表处理的硬件。基本上,您将在图形处理器的内存中构建显示列表,然后您可以通过发送单个命令来显示整个列表,而不是每次要显示对象时重新发送所有坐标等。这可以大大降低 CPU 和 GPU 之间的带宽需求。

实际上,它在很大程度上取决于您使用的硬件和 OpenGL 实现。在某些实现中,显示列表可以为您带来重大的性能改进——但在其他实现中,它基本上没有任何好处。

于 2012-05-10T14:39:55.533 回答
1

我正在阅读 Nehe OpenGL 教程,并且有一个关于显示列表的教程。

我建议停止阅读Nehe。我从来没有在 stackoverflow 上看到过任何与 Nehe 相关的好东西,而且我看到的教程使用了太多特定于平台的 API。

而不是 NEHE,转到 OpenGL.org 并检查“书籍”部分。或者, glprogramming.com上提供了“OpenGL 红皮书”的第一版。虽然它没有涵盖 OpenGL 4 中最新的 API,但所有可用的方法仍然可以通过“兼容性配置文件”在最新版本的 OpenGL 中使用。

是否有任何理由使用它而不是“类和对象”方式?

你混淆了两个不同的概念。显示列表是 OpenGL 保存 OpenGL 调用序列的方式,因此您可以稍后快速“调用”它们。根据 OpenGL 的实现,它可能会提高应用程序的性能。显示列表的使用与程序的内部组织 (OOP) 无关。您可以使用 OOP 并且仍然使用 cube.render() 中的显示列表。或者你可以使用顶点缓冲对象或任何你想要的。或者您可以以“非 OOP”风格工作,但仍然使用显示列表。

于 2012-05-10T19:02:00.293 回答
1

显示列表是在 GPU 级别预编译的。您自己的渲染函数是在 CPU 级别编译的,其各个命令在运行时仍需要通过 GPU。

这就像将“存储过程”与调用内联 SQL 的自定义函数进行比较。存储过程在服务器端编译并生成执行计划,而自定义函数仅在客户端程序集中编译。

于 2012-05-10T19:08:54.283 回答