我有openGL代码,它呈现一些对象并为其中的一些显示文本标签。通过使用gluProject将适当的顶点投影到屏幕上,然后添加一个小的偏移量,使标签位于顶点旁边来显示标签。这样每个标签与屏幕顶点的距离相同。如何在openGL显示列表中投影/未投影
我最初并没有使用显示列表(除了字形的显示列表),并且它正常工作(如果有点慢)。现在我为整个场景创建一个显示列表,并发现标签放置不正确。
我花了一段时间,但我想我已经基本上找到了问题:gluProject将投影矩阵,模型视图矩阵和视口作为参数。除了调用glGetDoublev(GL_MODELVIEW_MATRIX,...)等,我没有办法提供它们。但是,glGet函数在显示列表中是“不允许的”,这在经验上似乎意味着它们不会导致错误,而是立即执行。因此,编译到显示列表中的矩阵数据是从列表编译时间而不是列表执行时间(这是一个问题,因为我需要预编译列表,而不是立即执行)。至少这是我目前的理论。
- 任何人都可以确认或否认这会导致问题?
- 如何解决这个问题?我只想做gluProject的工作,但使用列表的当前矩阵。
注意:我知道在近期的openGL版本中已经弃用了各种函数/方法;请不要让我的答案沿着“你不应该这样做”;-)
当我在显示列表中调用glRotate时,会执行矩阵乘法。所以显示列表在执行时必须以某种方式访问当前的投影/模型视图矩阵(或否?)。那么可以不用glProject做什么(不一定直接调用它,而是应用相同的计算),与这些矩阵相乘?这就是我所说的“使用列表的当前矩阵”。或者我误解了一些东西(这很可能)? – Dabbler 2012-07-12 17:32:19