【问题标题】:Is it possible to use glScalef on a bitmap that is drawn with glBitmap?是否可以在使用 glBitmap 绘制的位图上使用 glScalef?
【发布时间】:2020-12-26 07:43:11
【问题描述】:

我正在制作一个使用 FreeType 2 和旧版 OpenGL 的文本渲染器。问题是,FreeType 2 的坐标系在左上角有 (0, 0),而 OpenGL 的坐标系是笛卡尔坐标系。这意味着我必须翻转位图。我希望 glScalef 可以与 glBitmap 一起使用,但它没有效果。谁能告诉我是否可以使用 glScalef 垂直翻转位图,或者如果不可能,请指出其他可以翻转位图的源(最好尽可能高效)?

glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glScalef(1.0, -1.0, 1.0)
glBitmap(size_x, size_y, 0, 0, xadd, yadd, (GLubyte *) bitmap);

【问题讨论】:

    标签: opengl opengl-compat freetype2 opengl-1.x


    【解决方案1】:

    你要找的函数是glPixelZoom

    像素缩放系数不限于正值。负缩放系数反映了关于当前光栅位置的结果图像。

    它肯定会对glDrawPixels 产生预期的效果。 glBitmap 中有一条注释说它的行为类似于 glDrawPixels,但我找不到任何关于 glPixelZoom 是否适用于 glBitmap 的明确声明,所以 YMMV。

    【讨论】:

    • 我对它进行了测试,但什么也没发生……它适用于 glBitmap 还是仅适用于 glDrawPixels?我听说 glDrawPixels 效率很低,如果可能的话,我想避免这种情况。
    • glBitmap 说“位图图像被解释为 glDrawPixels 命令的图像数据,宽度和高度对应于该命令的宽度和高度参数,类型设置为 GL_BITMAP 和格式设置到 GL_COLOR_INDEX。使用 glPixelStore 指定的模式会影响位图图像数据的解释;使用 glPixelTransfer 指定的模式不会。所以我希望它确实意味着它被视为 glDrawPixels 数据。
    • 如果glDrawPixels 指的是stackoverflow.com/a/8777965/103167,那么是的,他是对的,同样的警告也适用于glBitmap。纹理更好,但设置起来更复杂。
    • 谢谢,我会去弄清楚如何使用纹理,因为它们似乎比 glBitmap 更灵活。
    猜你喜欢
    • 2010-10-05
    • 2018-11-12
    • 2022-06-24
    • 2014-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-19
    • 1970-01-01
    相关资源
    最近更新 更多