C++ 大纲字体显示颠倒-glOrtho()设置不正确

C++ 大纲字体显示颠倒-glOrtho()设置不正确,c++,opengl,fonts,coordinates,C++,Opengl,Fonts,Coordinates,我正在OpenGL中创建一个应用程序,其中我正在使用原点位于左上角的glOrtho(): glOrtho(0.0, width, height, 0.0, 0.0, 1.0); 我一直没有发现它是错误的,直到我试图渲染轮廓字体,它看起来是颠倒的。在搜索了有关它的信息后,我发现了一个网站,在那个里我读到我的原点应该从左下角开始 我知道OpenGL使用的是左下角原点,但我发现使用左上角原点更容易。我只需水平翻转所有纹理,一切正常。但是,是的,问题出现在那些颠倒的轮廓字体上 现在要更改起始位置,我必

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

glOrtho(0.0, width, height, 0.0, 0.0, 1.0);
我一直没有发现它是错误的,直到我试图渲染轮廓字体,它看起来是颠倒的。在搜索了有关它的信息后,我发现了一个网站,在那个里我读到我的原点应该从左下角开始

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

现在要更改起始位置,我必须更改一堆代码,所以如果没有必要,我真的希望避免这种情况

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

您通常可以在不更改数据的情况下使用适当的纹理矩阵来修复此问题。

您通常可以在不更改数据的情况下使用适当的纹理矩阵来修复此问题。

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

也就是说,如果您是以过时的方式进行此操作:

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

当然,这些都是伪代码。

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

也就是说,如果您是以过时的方式进行此操作:

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,-1,1);要将文本倒转镜像(但这可能会干扰其内部转换设置,具体取决于您的文本库)

现在要更改起始位置,我必须更改一堆代码,所以如果没有必要,我真的希望避免这种情况

你可以随时更改项目。将左下角的原点用于文本,左上角的原点用于其他所有内容。不过,您必须根据文本的初始位置进行调整,但这并不难考虑


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

将原点放在左上角是错误的,因为它不是默认设置。库和文档将期望您拥有默认设置,并且只要您不这样做,您就会遇到像现在这样的问题。此外,一旦您真正知道自己在做什么,它就不再是错误的了。如果你知道会发生什么,不坚持默认值是可以的。而且不需要谷歌搜索其他人的答案。把来源放在左上角是错误的,因为它不是默认的。库和文档将期望您拥有默认设置,并且只要您不这样做,您就会遇到像现在这样的问题。此外,一旦您真正知道自己在做什么,它就不再是错误的了。如果你知道会发生什么,不坚持默认值是可以的。而且不需要谷歌搜索其他人的答案。但是纹理矩阵与字体有什么关系?我假设您使用纹理绘制文本(例如,您将字体渲染为纹理,然后绘制一些具有适当纹理坐标的纹理矩形)。根据您的评论,我假设情况并非如此?但纹理矩阵与字体有何关系?我假设您使用纹理绘制文本(例如,您将字体渲染为纹理,然后使用适当的纹理坐标绘制一些纹理矩形)。从你的评论来看,我认为情况并非如此?