GL glNewList 渲染列表似乎无视我重置比例
GL glNewList Render list seemingly ignoring me resetting the scale
正如标题所说,我在重置我的 GL 列表上的比例时遇到了一些麻烦,所以当渲染代码使用列表调用下一个时,它比应该的小,这导致它会不断变小,直到消失。
这是我的代码,没有渲染命令。为了充分展示我的尝试,我将首先简化代码。我正在为 Minecraft Beta 1.7.3 进行自定义字体代码修改,除了这个 ONE 部分之外,它工作得很好......它使用多个图像正确缩放字体。不管怎样,我们走吧。
for(int i1 = 0; i1 < ChatAllowedCharacters.allowedCharacters.length(); i1++)
{
updateFontImage(i1, renderengine, tex);
fontTextureName = getTextureId(i1, renderengine);
GL11.glNewList(fontDisplayLists + i1 + (i1 > 256 ? 512 : 0), 4864 /*GL_COMPILE*/);
GL11.glBindTexture(3553, fontTextureName);
tessellator.startDrawingQuads();
int l1 = (i1 % 16) * (textureWidth/16);
int k2 = (i1 / 16) * (textureWidth/16);
float f = (float)(textureWidth/16);
float f1 = 0.0F;
float f2 = 0.0F;
tessellator.addVertexWithUV(0.0D, 0.0F + f, 0.0D, (float)l1 / (float)(textureWidth) + f1, ((float)k2 + f) / (float)(textureWidth) + f2);
tessellator.addVertexWithUV(0.0F + f, 0.0F + f, 0.0D, ((float)l1 + f) / (float)(textureWidth) + f1, ((float)k2 + f) / (float)(textureWidth) + f2);
tessellator.addVertexWithUV(0.0F + f, 0.0D, 0.0D, ((float)l1 + f) / (float)(textureWidth) + f1, (float)k2 / (float)(textureWidth) + f2);
tessellator.addVertexWithUV(0.0D, 0.0D, 0.0D, (float)l1 / (float)(textureWidth) + f1, (float)k2 / (float)(textureWidth) + f2);
tessellator.draw();
GL11.glTranslatef(charWidth[i1], 0.0F, 0.0F);
GL11.glEndList();
}
如果您不知道 Minecraft 的代码是什么样的,请让我解释一下。 Tessellator 代码是命令 Tesselator 进行绘制的代码,据我所知,它本质上是一个 OpenGL 助手,可简化使用 OpenGL 的绘图。在我看来,这是非常聪明的。
updateFontImage 和 fontTextureName 正是我用来获取字体纹理图像的。
我确定所有代码都在渲染列表开始和结束命令中,而不是之前或之后。是的,应该出现不同的值,但为了测试我需要放置命令的位置,我现在只使用 .5 以确保无论使用什么图像,所有代码都是相同的,作为测试的控制。
所以,我试过了:
- 将 GL11.glScaled 1, 1, 1 放在列表的开头,将 .5, .5, .5 放在 tessellator.draw 之后的末尾。
- 将 GL11.glScaled 1, 1, 1 放在列表的开头,将 .5, .5, .5 放在 tessellator.draw 之前的末尾。
- 与上面相同,但开头的 .5、.5、.5 改为结尾的 1、1、1。
- 所有操作与上面相同,但将第一个 glScaled 命令放在 startDrawingQuads 之后,而不是之前。
- 我什至尝试通过在它后面放一个 1.5 1.5 1.5 来“对抗”.5 .5 .5...没有骰子!怎么办!?
- 我已经确保尝试将结束命令放在底部的翻译之前,然后再放在翻译之后。仍然没有。
无论我多么努力地加载游戏,渲染的每个字母都比最后一个小,就好像我从未尝试过重置比例一样。我该如何解决?我完全被难住了。我知道每个字母都可以正确地单独呈现,因为每个字母都可以分配自己的字体图像。
提前感谢您的回答。我会尝试任何人告诉我的,或者告诉他们我是否已经尝试过但忘记将其放在上面的列表中。
作为参考,这是我尝试过的几乎所有内容的愚蠢结果。Silly Text
镶嵌器四边形随着图像尺寸的增大而变大,游戏最初通过将它们缩小以获得更大的字体表来解决此问题。但是,我可以改为强制它以默认大小呈现,而更高分辨率的字母正好适合。
正如标题所说,我在重置我的 GL 列表上的比例时遇到了一些麻烦,所以当渲染代码使用列表调用下一个时,它比应该的小,这导致它会不断变小,直到消失。
这是我的代码,没有渲染命令。为了充分展示我的尝试,我将首先简化代码。我正在为 Minecraft Beta 1.7.3 进行自定义字体代码修改,除了这个 ONE 部分之外,它工作得很好......它使用多个图像正确缩放字体。不管怎样,我们走吧。
for(int i1 = 0; i1 < ChatAllowedCharacters.allowedCharacters.length(); i1++)
{
updateFontImage(i1, renderengine, tex);
fontTextureName = getTextureId(i1, renderengine);
GL11.glNewList(fontDisplayLists + i1 + (i1 > 256 ? 512 : 0), 4864 /*GL_COMPILE*/);
GL11.glBindTexture(3553, fontTextureName);
tessellator.startDrawingQuads();
int l1 = (i1 % 16) * (textureWidth/16);
int k2 = (i1 / 16) * (textureWidth/16);
float f = (float)(textureWidth/16);
float f1 = 0.0F;
float f2 = 0.0F;
tessellator.addVertexWithUV(0.0D, 0.0F + f, 0.0D, (float)l1 / (float)(textureWidth) + f1, ((float)k2 + f) / (float)(textureWidth) + f2);
tessellator.addVertexWithUV(0.0F + f, 0.0F + f, 0.0D, ((float)l1 + f) / (float)(textureWidth) + f1, ((float)k2 + f) / (float)(textureWidth) + f2);
tessellator.addVertexWithUV(0.0F + f, 0.0D, 0.0D, ((float)l1 + f) / (float)(textureWidth) + f1, (float)k2 / (float)(textureWidth) + f2);
tessellator.addVertexWithUV(0.0D, 0.0D, 0.0D, (float)l1 / (float)(textureWidth) + f1, (float)k2 / (float)(textureWidth) + f2);
tessellator.draw();
GL11.glTranslatef(charWidth[i1], 0.0F, 0.0F);
GL11.glEndList();
}
如果您不知道 Minecraft 的代码是什么样的,请让我解释一下。 Tessellator 代码是命令 Tesselator 进行绘制的代码,据我所知,它本质上是一个 OpenGL 助手,可简化使用 OpenGL 的绘图。在我看来,这是非常聪明的。 updateFontImage 和 fontTextureName 正是我用来获取字体纹理图像的。
我确定所有代码都在渲染列表开始和结束命令中,而不是之前或之后。是的,应该出现不同的值,但为了测试我需要放置命令的位置,我现在只使用 .5 以确保无论使用什么图像,所有代码都是相同的,作为测试的控制。 所以,我试过了:
- 将 GL11.glScaled 1, 1, 1 放在列表的开头,将 .5, .5, .5 放在 tessellator.draw 之后的末尾。
- 将 GL11.glScaled 1, 1, 1 放在列表的开头,将 .5, .5, .5 放在 tessellator.draw 之前的末尾。
- 与上面相同,但开头的 .5、.5、.5 改为结尾的 1、1、1。
- 所有操作与上面相同,但将第一个 glScaled 命令放在 startDrawingQuads 之后,而不是之前。
- 我什至尝试通过在它后面放一个 1.5 1.5 1.5 来“对抗”.5 .5 .5...没有骰子!怎么办!?
- 我已经确保尝试将结束命令放在底部的翻译之前,然后再放在翻译之后。仍然没有。
无论我多么努力地加载游戏,渲染的每个字母都比最后一个小,就好像我从未尝试过重置比例一样。我该如何解决?我完全被难住了。我知道每个字母都可以正确地单独呈现,因为每个字母都可以分配自己的字体图像。
提前感谢您的回答。我会尝试任何人告诉我的,或者告诉他们我是否已经尝试过但忘记将其放在上面的列表中。
作为参考,这是我尝试过的几乎所有内容的愚蠢结果。Silly Text
镶嵌器四边形随着图像尺寸的增大而变大,游戏最初通过将它们缩小以获得更大的字体表来解决此问题。但是,我可以改为强制它以默认大小呈现,而更高分辨率的字母正好适合。