java纹理坐标不能正常工作?
我不知道我是否只是。。。没看到什么。我已经为此工作了很长一段时间,试图让它发挥作用。我以前使用过雪碧片和纹理坐标,所以我对它们很熟悉
我有一张9 x 9的雪碧纸(如图所示)。这是一个等距精灵表(因为我有等距瓷砖)。总图像为1152 x 576
我计算出,基于尺寸,每个瓷砖的宽度是128像素,高度是64
每个磁贴占据的图像百分比为0.111(长度和高度[128/1152 | 64/576])
然而,我的代码不起作用
代码和tilesheet的图像:http://i.imgur.com/JU4YYaB.png
原始代码:
@Override
public void drawTile(int tileX, int tileY, Texture atlas) {
int tileXcoord, tileYcoord;
tileXcoord = (tileX - tileY) * (TILE_XHALF);
tileYcoord = (tileX + tileY) * (TILE_YHALF);
atlas.bind();
//GL11.glColor3f(Red, Green, Blue);
GL11.glBegin(GL11.GL_QUADS);
{
setTextureCoordinates(1);
GL11.glVertex2f(tileXcoord, tileYcoord);
setTextureCoordinates(2);
GL11.glVertex2f(tileXcoord + TILE_XHALF, tileYcoord + TILE_YHALF);
setTextureCoordinates(3);
GL11.glVertex2f(tileXcoord + (TILE_XHALF * 2), tileYcoord);
setTextureCoordinates(4);
GL11.glVertex2f(tileXcoord + TILE_XHALF, tileYcoord - TILE_YHALF);
}
GL11.glEnd();
}
//***** SET TEXTURE COORDINATES *****
public void setTextureCoordinates(int pos) {
Rectangle rect = textureAtlas.getTexture(ID);
switch (pos) {
case 1 :
GL11.glTexCoord2f(0.0f, 0.0555f); // left-middle
//GL11.glTexCoord2f(0.0f, 0.5f);
break;
case 2:
GL11.glTexCoord2f(0.0555f, 0.111f); //top-middle
//GL11.glTexCoord2f(0.5f, 1f);
break;
case 3:
GL11.glTexCoord2f(0.111f, 0.0555f); // right-middle
//GL11.glTexCoord2f(1f, 0.5f);
break;
case 4:
GL11.glTexCoord2f(0.0555f, 0.0f); // bottom-middle
//GL11.glTexCoord2f(0.5f, 0.0f);
break;
}
}
# 1 楼答案
看起来游戏中每个渲染的瓷砖上都有一块半的纹理
凭直觉,我猜无论你用什么来加载纹理,都会将图像填充到下一个二次方(2048 x 1024)
你的坐标将是(像素坐标):
这似乎与你的纹理接缝大致匹配。我不熟悉提供OpenGL绑定的Java库,但鉴于您正在显式使用OpenGL 1.1,该库可以做到这一点是有道理的。当时(1997年)的硬件无法处理非二次幂的纹理This was added as an extension in 2003
你可以:
一般来说,最好将纹理叠加到二次方,因为用于表示平铺的浮标将始终精确表示