【问题标题】:Outline font appears upside-down - glOrtho() set incorrectly轮廓字体出现倒置 - glOrtho() 设置不正确
【发布时间】:2012-12-29 10:55:42
【问题描述】:

我正在 OpenGL 中创建一个应用程序,我在其中使用 glOrtho(),原点位于左上角:

glOrtho(0.0, width, height, 0.0, 0.0, 1.0);

直到我尝试渲染出现颠倒的轮廓字体,我才发现它是错误的。在搜索了有关它的信息后,我遇到了我读到我的起源应该从左下角开始的网站。

我知道 OpenGL 使用左下角原点,但我发现使用左上角原点更容易。我只需要水平翻转所有纹理,一切都很好。但是,是的,问题出现在那些颠倒的轮廓字体上。

现在要更改原点,我必须更改一堆代码,所以如果没有必要,我真的很想避免这种情况。

所以我的问题是: 我的左上角原点的方法非常错误吗?如果没有,有没有办法让这些轮廓字体正确显示?

【问题讨论】:

  • 将原点放在左上角是错误的,因为它不是默认值。库和文档会期望您使用默认设置,只要您不这样做,您就会遇到像现在这样的问题。
  • 补充说,一旦你真正知道自己在做什么,它就不会出错。如果您知道会发生什么,那么不坚持默认设置就可以了。并且不需要其他人提供易于谷歌的答案。

标签: c++ opengl fonts coordinates


【解决方案1】:

您正在某处渲染该字体,对吗? 你是如何渲染它的,当时是什么阻止你应用垂直镜像变换​​矩阵?

即如果您以老式过时的方式执行此操作:

glScalef( 1, -1, 1 );
glCallList(font); // Or whatever you are doing to render the outline font

或者,如果您正在使用着色器,请让您的顶点着色器执行以下操作:

  Vec4 position = aPosition;
  position.y = -1 * position.y;
  gl_Position = aMVPMatrix * position

当然,这都是伪代码。

【讨论】:

    【解决方案2】:

    现在要更改原点,我必须更改一堆代码,所以如果没有必要,我真的很想避免这种情况。

    您可以随时更改投影仪。为您的文本使用左下角的原点,为其他所有内容使用左上角的原点。不过,您必须针对被翻转的文本初始位置进行调整,但这并不难考虑。

    或者,您可以简单地应用局部比例(1,-1,1);将文本倒置(取决于您的文本库,这可能会干扰其内部转换设置)。

    【讨论】:

      【解决方案3】:

      您通常可以通过使用适当的纹理矩阵来解决此问题,而无需更改数据。

      【讨论】:

      • 但是纹理矩阵与字体有什么关系?
      • 我假设您正在使用纹理绘制文本(例如,您将字体渲染为纹理,然后使用正确的纹理坐标绘制一些带纹理的矩形)。根据您的评论,我认为情况并非如此?
      猜你喜欢
      • 2021-09-14
      • 2018-11-29
      • 2013-11-19
      • 2017-01-10
      • 1970-01-01
      • 2016-05-28
      • 1970-01-01
      • 2019-09-16
      • 2012-06-28
      相关资源
      最近更新 更多