为什么设置glRasterPos使我的ftgl文本消失?

时间:2012-10-19 23:15:44

标签: opengl fonts ftgl

我正在努力使用FTGL库来处理opengl中的字体。例如,我仍然没有弄清楚如何将文本放在屏幕上除了左下角之外的某个地方。我目前正在使用pixmap字体,我开始尝试使用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);

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

1 个答案:

答案 0 :(得分:1)

glRasterPos在调用时会被矩阵堆栈的当前值转换,它不只是“设置”该值。

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

如果您将模型视图和投影矩阵设置为identity,那么您的get / set操作应该按照您的预期进行。

来自MSDN的引用:

  

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