1

それぞれテクスチャが異なるブロックを画面に表示しようとしています。スプライトシートとコードをセットアップしました。しかし、スプライトシートで特定の座標を取得することができず、最初の画像として他に何も表示できません。

このレンダリング機能をセットアップしました:

public static void render(int texture, int blockID) {
    float xPos = (float)blockID;
    float yPos = 0;

    while(xPos > 9) {
        xPos -= 10;
        yPos++;
    }

    glBindTexture(GL_TEXTURE_2D, texture);

    glPushMatrix();
        glBegin(GL_TRIANGLES);
            glTexCoord2f((8f / 160f) * xPos, (8f / 160f) * yPos); glVertex2i(16, 0);
            glTexCoord2f((8f / 160f) * xPos, (8f / 160f) * yPos); glVertex2i(0, 0);
            glTexCoord2f((8f / 160f) * xPos, (8f / 160f) * yPos); glVertex2i(0, 16);

            glTexCoord2f((8f / 160f) * xPos, (8f / 160f) * yPos); glVertex2i(0, 16);
            glTexCoord2f((8f / 160f) * xPos, (8f / 160f) * yPos); glVertex2i(16, 16);
            glTexCoord2f((8f / 160f) * xPos, (8f / 160f) * yPos); glVertex2i(16, 0);
        glEnd();
    glPopMatrix();
}

ブロック ID からどのテクスチャを取得するかを決定するため、ブロック ID が 1 の場合はスプライトシートから 2 番目の画像を取得し、2 の場合は 3 番目の画像を取得します。

しかし、xPos 変数と yPos 変数を glTexCoord2f に乗算する必要がある場所がわかりません。私は次のようなさまざまな方法を試しました:

glTexCoord2f(xPos / 128f, 0f / 128f); glVertex2i(16, 0);
glTexCoord2f(0f / 128f, yPos / 128f); glVertex2i(0, 16);

また

glTexCoord2f((0f / 128f) * xPos, 0f / 128f; glVertex2i(16, 0);
glTexCoord2f(0f / 128f, (8f / 128f)) * yPos; glVertex2i(0, 16);

そしてさえ

glTexCoord2f(0f / 128f, 0f / 128f); glVertex2i(16 * xPos, 0);
glTexCoord2f(0f / 128f, 8f / 128f); glVertex2i(0, 16 * yPos);

しかし、どれも機能しませんでした。

=== 編集 ===

私はほとんどそれを機能させることができました。ただし、ブロックIDが奇数の場合のみ。blockID が 1 の場合は最初のテクスチャが表示されますが、2 の場合は茶色がかった色 (私のスプライトシートにはありません) が表示され、blockID が 3 の場合はシートに 2 番目のテクスチャが表示されます。

4

1 に答える 1