我遇到了LWJGL的问题,并使用位图的字符构造了四边形。 我想显示一个大写的 T 。 T位于第6行和第5列。这是左上角的X:40,Y:32px。
我使用以下代码:
GL11.glTexCoord2f((float) (Math.floor(charID / this.charsInRow) * charSize) / bitmapSize, (float) (Math.floor(charID % this.charsInRow) * charSize) / bitmapSize);
GL11.glVertex2f((charPosition * fontSize) + x, y);
GL11.glTexCoord2f((float) (Math.floor(charID / this.charsInRow) * charSize + charSize) / bitmapSize, (float) (Math.floor(charID % this.charsInRow) * charSize) / bitmapSize);
GL11.glVertex2f((charPosition * fontSize) + x + fontSize, y);
GL11.glTexCoord2f((float) (Math.floor(charID / this.charsInRow) * charSize + charSize) / bitmapSize, (float) (Math.floor(charID % this.charsInRow) * charSize + charSize) / bitmapSize);
GL11.glVertex2f((charPosition * fontSize) + x + fontSize, y + fontSize);
GL11.glTexCoord2f((float) (Math.floor(charID / this.charsInRow) * charSize) / bitmapSize, (float) (Math.floor(charID % this.charsInRow) * charSize + charSize) / bitmapSize);
GL11.glVertex2f((charPosition * fontSize) + x
,y + fontSize);
但LWJGL从右下角开始计算,显示一个奇怪的ASCII符号。
我可以做什么才能选择T?
答案 0 :(得分:1)
OpenGL标准化纹理坐标从左下角(0,0)开始,然后转到右上角(1,1)。在您的问题中,您使用了错误的方法来处理您的字形 - 特别是,您应该从底部而不是顶部开始。
根据您的示例图片判断,您的坐标应该遵循以下格式:
Glyph Bottom Left: (X - <GlyphWidth>, <TextureResY> - Y - <GlyphHeight>)
Glyph Top Right: (X, <TextureResY> - Y )
其中X和Y分别为40和32。
此外,您似乎已经转置了行和列。