【问题标题】:Display List and transformation显示列表和转换
【发布时间】:2025-12-15 08:15:02
【问题描述】:

每当我在显示列表中输入转换(gltranslate、grotate、glscale)时,该转换都会作为命令保留在显示列表中。每次渲染显示列表时,它都会一遍又一遍地计算。

有没有办法,我可以进行 opengl 转换并将转换后的顶点坐标永久存储在显示列表中,而不是转换和初始坐标?

【问题讨论】:

  • 如何判断显示列表数据的内部格式是什么?你只有一个不透明的把手,对吧?

标签: opengl


【解决方案1】:

将矩阵变换manually 应用于顶点,然后再将它们提交到显示列表。

但 Drew Hall 是对的:驱动程序在编译您的显示列表时可能已经在做类似的事情了。

【讨论】:

  • 实际上可能不是。显示列表实现是那些很难同时正确和优化的事情之一,因为有太多的极端情况需要处理。问题示例: 1. 无法确保 GL 旋转将针对 MODELVIEW 矩阵。如果 PROJECTION 在 glCallList 之前处于活动状态,则行为必须不同。 2.在显示列表执行后,旋转需要在矩阵堆栈的顶部处于活动状态......而且我确信我不会想到所有极端情况。