繁体   English   中英

纹理坐标不能正常运行?

[英]Texture Coordinates not Functioning Properly?

我不知道我只是...在这里没看到什么。 我一直在努力使它正常工作。 我以前使用过精灵表和纹理坐标-因此我对它们很熟悉。

我有一个9 x 9的Sprite工作表(如图所示)。这是一个等距Sprite工作表(因为我有等距的图块)。 总图像为1152 x 576。

我根据尺寸计算得出,每个图块的宽度为128像素,高度为64。

每个图块所占图像的百分比为0.111(纵向和纵向[128/1152 | 64/576])。

但是,我的代码无法正常工作。

代码和图块的图像: 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;
        }

}

编辑:输出: http : //i.imgur.com/YYKo37m.png

看起来您在游戏中的每个渲染图块上都将得到一个图块和一半的纹理。

凭直觉,我将猜测您用于加载纹理的任何内容会将图像填充到下一个2的幂(2048 x 1024)。

这样,您的坐标将是(以像素坐标为单位):

(0,     56.8 )
(113.7, 113.7)
(227.3, 56.8 )
(113.7, 0    )

这似乎与您的纹理接缝大致匹配。 我不熟悉提供OpenGL绑定的Java库,但是看到您显式地使用OpenGL 1.1时,该库就可以这样做。 当时的硬件(1997年)无法处理不是2的幂的纹理。 这是在2003年作为扩展添加的

您可以:

  1. 自己将纹理填充到下一个2的次方,并为此使用适当的坐标(0.0625而不是0.111)
  2. 查看正在使用的库的纹理加载文档,并查看是否有一种方法可以强制执行非二次幂纹理。 如果没有的话,我会很惊讶。

通常,最好将纹理填充到2的幂,因为您用来表示图块的浮点数将始终被精确表示。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM