0

わかりました。私は独学のプログラマーです。lwjglとslik-utilsを使用して、ゲームを作成するためのツールを提供するライブラリを作成しようとしています。私はスプライトシートを作成しようとしていて、glTexCoord()を使用して画像の一部のみを取得しようとしています。しかし、最善を尽くして、私はうまくいきませんでした。これが描画コードです。

public SpriteSheet draw(int x, int y, Point2D p)
    {
    GL11.glPushMatrix();
    float x1 = p.posX * size + (size / 2F);
    float y1 = p.posY * size + (size / 2F);
    float d = 1F / texture.getImageHeight();
    int i = size / 2;
    //Texture centers for coords
    float x2 = x1 * d;
    float y2 = y1 * d;
    float d1 = i * d;

    GL11.glBindTexture(GL11.GL_TEXTURE_2D, texture.getTextureID());
    GL11.glBegin(GL11.GL_QUADS);
    GL11.glTexCoord2f(x2 - d1, y2 - d1);
    //GL11.glTexCoord2f(0, 0);
    GL2D.vertex(x - i, y - i);
    GL11.glTexCoord2f(x2 - d1, y2 + d1);
    //GL11.glTexCoord2f(0, 1);
    GL2D.vertex(x - i, y + i);
    GL11.glTexCoord2f(x2 + d1, y2 + d1);
    //GL11.glTexCoord2f(1, 1);
    GL2D.vertex(x + i, x + i);
    GL11.glTexCoord2f(x2 + d1, y2 - d1);
    //GL11.glTexCoord2f(1, 0);
    GL2D.vertex(x - i, y + i);
    GL11.glEnd();
    GL11.glBindTexture(GL11.GL_TEXTURE_2D, 0);
    GL11.glPopMatrix();
    //TexturedQuad2D t = new TexturedQuad2D(32, 32, Color.black, texture);
    //t.draw(x, y);
    return this;
}
4

1 に答える 1

1

はい、間違っています:)
x と y はワールド空間座標であり、テクスチャ座標空間ではありません。x と y が座標 700、800 にあり、テクスチャ サイズが 512 であると想像してください。700 / 512 = 1.4、テクスチャ座標は 0 から 1 になります。
最初のステップとして、テクスチャ座標を 0 と 1 に設定してみてください。

 GL11.glTexCoord2f(0, 0);
 GL11.glTexCoord2f(0, 1);
 GL11.glTexCoord2f(1, 1);
 GL11.glTexCoord2f(1, 0);

2 番目のステップとして、テクスチャ座標の一部を計算する方法を理解し始めます。
したがって、2 つのフレームを持つスプライトがある場合、最初のフレームでは 0 から 0.5、2 番目では 0.5 から 1 になります。

//first frame would be
 GL11.glTexCoord2f(0, 0);
 GL11.glTexCoord2f(0, 1);
 GL11.glTexCoord2f(0.5, 1);
 GL11.glTexCoord2f(0.5, 0);
//second frame would be
 GL11.glTexCoord2f(0.5, 0);
 GL11.glTexCoord2f(0.5, 1);
 GL11.glTexCoord2f(1, 1);
 GL11.glTexCoord2f(1, 0);

3 番目のステップとして、この座標を計算するスプライト クラスを記述します。

ps。GL11.glEnable (GL11.GL_TEXTURE_2D); GL11.glEnable(GL11.GL_TEXTURE_2D); テクスチャを取得するには?

于 2012-07-14T13:00:29.467 に答える