1

即使在阅读了红皮书之后,当我使用 OpenGL 绘制字体时,我仍然无法理解“光栅位置”。什么是光栅位置?glrasterpos2f 和 glvertex2f 有什么区别?什么是 GL_CURRENT_RASTER_POSITION?为什么我必须使用这个 API 来绘制字体?如果有人能说明这一点,我将不胜感激。

4

1 回答 1

4

旧版本的 OpenGL 有许多“光栅”操作,它们直接在帧缓冲区的像素光栅上执行像素操作,而无需经过整个图元设置。

光栅位置是窗口坐标中的位置,下一个光栅操作将从该位置开始。例如,glDrawPixels只会过度绘制帧缓冲区的一部分,光栅位置定义了将放置替换像素数据的左下角。与glBitmap类似,它允许用glColor替换像素值,并在同一步骤中推进光栅位置。

当使用 glRasterPos 设置光栅位置时,传递给此调用的坐标与顶点坐标经过相同的转换管道,以生成窗口坐标光栅位置。重要的是只有光栅位置被转换,实际的光栅操作发生在“像素空间”中并且没有被转换。此外,如果传递给 glRasterPos 的坐标恰好被裁剪,则以下栅格操作将变为 No-Ops。

如果你想直接在窗口坐标中设置光栅位置,你可以使用glWindowPos

为什么我必须使用这个 API 来绘制字体?

使用glBitmap绘制位图字体很简单,因此它曾经是一种非常流行的字体绘制方法。因此,如果您使用光栅操作来绘制字体,则必须设置光栅位置。

然而,在现代版本的 OpenGL(版本 3 及更高版本)中,所有光栅操作都已被删除。这也意味着,您必须使用不同的方法在现代版本的 OpenGL 中绘制文本。

于 2013-06-09T10:19:16.307 回答