0

我正在为 opengl 中的字体使用 FTGL 库而苦苦挣扎。例如,我还没有弄清楚如何将文本放在屏幕左下角以外的某个位置。我目前正在使用像素图字体,并开始尝试使用glRasterPos.

以下代码“有效”,因为它将左下角的文本显示为白色:

ftglRenderFont(ftgl_freesans, "HELLO WORLD!", FTGL_RENDER_ALL);

在以下示例中,文本根本不显示:

float r[4];
glGetFloatv(GL_CURRENT_RASTER_POSITION, r);
glRasterPos4fv(r);
ftglRenderFont(ftgl_freesans, "HELLO WORLD!", FTGL_RENDER_ALL);

我很困惑!应该没有什么不同,那为什么字体不渲染呢?

4

1 回答 1

1

当您调用 glRasterPos 时,它会根据矩阵堆栈的当前值进行转换,而不仅仅是“设置”该值。

查询当前栅格位置的值会返回已经转换的位置。因此,调用glRasterPos(glGet(GL_CURRENT_RASTER_POSITION))具有将当前窗口空间位置再次通过变换矩阵的效果,这不是您想要的。

如果您将模型视图和投影矩阵设置为恒等,那么您的 get/set 操作应该符合您的预期。

来自 MSDN 的引用:

glRasterPos 提供的对象坐标被视为与 glVertex 命令的坐标一样。它们由当前的模型视图和投影矩阵转换并传递到裁剪阶段。如果顶点没有被剔除,那么它被投影并缩放到窗口坐标,这成为新的当前光栅位置。

于 2012-10-19T23:27:40.370 回答