0

在屏幕上显示位图文本并使用 glRasterPos3f 函数定位它们时,我遇到了一个相当奇怪的错误。当我启动应用程序时,我的所有文本都适合视图,并且一切正常且花花公子。然而,一旦其中一个离开视图,事情就开始变得一团糟——我的所有文本都消失了,并且即使我将视图设置回其原始位置也不会再次出现。

我做了一些调查并对光栅位置有效性标志进行了明确的检查,如下所示:

glRasterPos3f(xPos, yPos, zPos);

// check raster position validity
GLboolean valid;
pin_ptr<GLboolean> p_valid = &valid;
glGetBooleanv(GL_CURRENT_RASTER_POSITION_VALID, p_valid);
if (!valid)
  return;

好吧,现在事情开始让我大吃一惊 - 这段代码末尾的条件不仅会在文本位置超出视图时触发,而且从那时起!它让我陷入绝望。即使我将视图恢复到其通常的工作状态,有效性位似乎永远保持清除。关于可能是什么原因或如何以某种方式手动恢复光栅位置的任何想法?

编辑:一些图片...

初始状态,一切正常:http: //i.imgur.com/SFGU4QI.png

我放大,一些光栅位置无效,文本消失:http: //i.imgur.com/cj2xVAs.png

当我再次缩小时,仍然没有任何文本...

4

1 回答 1

3

如果 glRasterPos 转换到裁剪空间之外到 NDC 空间体积,则所有 OpenGL 光栅操作都将被丢弃。因此,如果您的文本从可见视口之外的位置开始,它将不会显示。如果文本延伸到可见视口之外,最后一个可见字符之后的所有内容都会变得混乱。

这意味着, glRasterPos 相当没用。强烈建议不要使用它,就像所有 OpenGL 光栅操作一样。事实上,这些已经完全从现代 OpenGL 版本中删除了。

于 2013-09-05T15:17:14.760 回答