【问题标题】:Obtaining the current normal in LWGL在 LWGL 中获取当前法线
【发布时间】:2012-11-28 19:09:30
【问题描述】:

我有一个简单的问题。

我正在开发一个 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 中获取平移和比例信息?或者,鉴于我的情况,有没有更好的方法来做到这一点?

【问题讨论】:

    标签: java opengl minecraft


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-25
      • 2015-12-04
      • 2014-09-10
      • 1970-01-01
      • 2013-08-20
      相关资源
      最近更新 更多