我有渲染一些对象并为其中一些显示文本标签的openGL代码。显示标签是通过使用 gluProject 将适当的顶点投影到屏幕上来完成的,然后添加一个小的偏移量,使标签位于顶点旁边。这样,每个标签与屏幕上的顶点的距离相同。
我最初并没有为此使用显示列表(除了字形的显示列表),它工作正常(如果有点慢)。现在我为整个场景构建了一个显示列表,发现标签放置不正确。
我花了一段时间,但我想我基本上找到了问题:gluProject 将投影矩阵、模型视图矩阵和视口作为参数。除了调用 glGetDoublev(GL_MODELVIEW_MATRIX, ...) 等之外,我认为没有其他方法可以提供它们。但是 glGet 函数在显示列表中是“不允许的”,从经验上看,这似乎意味着它们不会导致错误,而是立即执行。所以被编译到显示列表中的矩阵数据是来自列表编译时间而不是列表执行时间(这是一个问题,因为我需要预编译列表,而不是立即执行它)。至少这是我目前的理论。
- 任何人都可以确认或否认这会导致问题吗?
- 如何解决这个问题?我只想做 gluProject 所做的,但使用列表的当前矩阵。
注意:我知道在最新版本的 openGL 中不推荐使用各种功能/方法;请按照“你不应该那样做”的方式回答我;-)