1

私は現在、LWJGLテクスチャを使用して画面に画像を描画しています。スプライトシートからテクスチャ*を読みたいのですが。slickのTextureLoaderクラスを使用してテクスチャをロードしています。

LWJGLシェイプを描画し、それにテクスチャをバインドします。

例えば:

私は画像を描きます:

    Texture texture = ResourceManager.loadTexture("Images/Tests/test.png");

    GL11.glBegin(GL11.GL_QUADS);
    {
      GL11.glTexCoord2f(0, 0);
      GL11.glVertex2f(0, 0);
      GL11.glTexCoord2f(0, texture.getHeight());
      GL11.glVertex2f(0, height);
      GL11.glTexCoord2f(texture.getWidth(), texture.getHeight());
      GL11.glVertex2f(width,height);
      GL11.glTexCoord2f(texture.getWidth(), 0);
      GL11.glVertex2f(width,0);
    }
    GL11.glEnd();

glTexCoord2fを呼び出すときに、スプライトオフセットを指定して、代わりにスプライトシートをテクスチャにロードする方法があると思います。

たとえば、1つの呼び出しは次のようになります。

      GL11.glTexCoord2f(0+spriteXOffset, texture.getHeight()-spriteYOffset);

しかし、もっと簡単な方法があるかどうかを知りたいのですが、たとえば、ここで行うように、単一のテクスチャからテクスチャを抽出することもできます。

スプライトシートJavaからの画像の読み取り

BufferedImageの代わりに、Textureオブジェクト。

お手伝いありがとう!

4

1 に答える 1

6

Slickテクスチャローダーによって内部的に使用されるGL_TEXTURE_2Dのテクスチャ座標には、正規化されたテクスチャ座標が必要です。つまり、座標範囲は0.0から1.0です。したがって、(0,0)はテクスチャの左上隅であり、(1,1)は右下隅です。手元にピクセル座標のスプライト座標があると仮定すると、x座標をテクスチャ幅で除算し、y座標をテクスチャ高さで除算して、正規化されたテクスチャ座標を作成する必要があります。次に、glTexCoordを使用してこれらの座標をOpenGLに提供します。

glTexCoord2f(spriteX / textureWidth, spriteY / textureHeight);
glVertex2f(coordinateX, coordinateY);
glTexCoord2f(spriteX+spriteWidth / textureWidth, spriteY / textureHeight);
glVertex2f(coordinateX2, coordinateY);
// Et cetera

ただし、これを行う簡単な方法もあります。このビデオ(私が作成したもの)を見て、正規化されたものの代わりにテクスチャのピクセル座標を使用する方法を確認してください。

于 2012-08-05T17:46:24.743 に答える