我有一个简单的问题。
我正在开发一个Minecraft mod,它要求我通过glOrtho()禁用看起来很糟糕的缩放集并指定我自己的缩放集,这样我就可以绘制一个漂亮的,非像素化的字符串。如果你曾经见过Minecraft,字体看起来很糟糕。
在我的mod中,我使用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中获取翻译和缩放信息?或者,根据我的情况,有更好的方法吗?
答案 0 :(得分:0)
你正在推动矩阵。这要求您使用相同数量的glPopMatrix()
调用来平衡这一点,以便堆栈不会溢出。每个glPushMatrix
glPopMatrix
对就像一组“大括号”。在关闭glPopMatrix
之后,堆栈的矩阵状态将在恢复对相应glPushMatrix
的调用之前恢复。
然而! OpenGL不是场景图,矩阵堆栈不定义“当前位置”或“当前缩放”。它定义了从模型空间到眼睛空间(模型视图矩阵)以及从眼睛空间到剪辑空间(投影)的转换。那就是矩阵所做的事情。没有场景,没有对象,没有关于位置的内部存储以及类似OpenGL中的内容。所以我认为你必须稍微调整一下你对OpenGL的想法。