无法理解 gl 光栅位置

Yan*_* Li 3 opengl

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

dat*_*olf 7

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

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

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

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

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

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

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