1

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

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

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

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

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

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

4

3 回答 3

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

当然,这一切都是伪代码。

于 2012-12-29T15:00:59.243 回答
2

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

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

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

于 2012-12-29T15:51:14.970 回答
1

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

于 2012-12-29T13:22:17.940 回答