轮廓字体显示为颠倒 - glOrtho()设置不正确

时间:2012-12-29 10:55:42

标签: c++ opengl fonts coordinates

我正在OpenGL中创建一个应用程序,我在左上角使用glOrtho()来源:

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

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

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

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

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

3 个答案:

答案 0 :(得分:4)

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

即。如果你这样做是老式的,过时的方式:

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

当然,这都是伪代码。

答案 1 :(得分:2)

  

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

您可以随时更改投影。在左下角使用原点作为文本,在左上角使用原点作为其他所有内容。不过,您必须调整文本初始位置,但这并不是很难考虑。

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

答案 2 :(得分:1)

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