位图中的X和Y以及使用Java打开GL

时间:2013-08-24 19:17:43

标签: java opengl

我遇到了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?

1 个答案:

答案 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。

此外,您似乎已经转置了行和列。