1

我有一个简单的问题。

我正在开发一个 Minecraft mod,它要求我禁用通过 glOrtho() 设置的可怕缩放设置并指定我自己的,以便我可以绘制一个漂亮的、非像素化的字符串。如果你看过 Minecraft,字体看起来很可怕。

在我的模组中,我使用 Slick(一种 2D Java 游戏 API)来渲染字符串和加载字体。我已经正确设置了 Slick 并且看到了在菜单上正确绘制的字体。唯一的问题是在我重置矩阵时......

GL11.glMatrixMode(GL11.GL_PROJECTION);      // Select Projection
GL11.glPushMatrix();      // Push The Matrix
GL11.glLoadIdentity();        // Reset The Matrix
GL11.glOrtho(0, Minecraft.getMinecraft().displayWidth,                 Minecraft.getMinecraft().displayHeight, 0, 3000.0D, -3000.0D);
GL11.glMatrixMode(GL11.GL_MODELVIEW);  // Select Modelview Matrix
GL11.glPushMatrix();    // Push The Matrix
GL11.glLoadIdentity();    // Reset The Matrix

我松开了以前函数中的平移和比例设置。(我没写过的)

我可以通过这个游戏的创造者 Mojang 已经编写的源代码很容易地获得当前的比例因子。如果我可以在重置矩阵之前获得比例和法线,我希望我可能有机会以 1 比 1 的像素比例正确渲染这些字符串(提供最佳显示分辨率)。

所以,底线:如何在 LWGL 中获取平移和比例信息?或者,鉴于我的情况,有没有更好的方法来做到这一点?

4

1 回答 1

0

你在推动矩阵。这要求您使用相同数量的glPopMatrix()调用来平衡这一点,以便堆栈不会溢出。每glPushMatrix glPopMatrix对就像一组“大括号”。在关闭glPopMatrix堆栈的矩阵状态之后,恢复对相应的调用之前的状态glPushMatrix

然而!OpenGL 不是场景图,矩阵堆栈没有定义“当前位置”或“当前缩放”。它定义了从模型空间到眼睛空间(模型视图矩阵)以及从眼睛空间到剪辑空间(投影)的转换。这就是矩阵的作用。没有场景,没有对象,在 OpenGL 中没有关于位置和类似内容的内部存储。所以我认为你必须稍微调整一下你对OpenGL的想法。

于 2012-11-28T20:54:51.990 回答