1

そのため、私が行ったカスタムフォントを使用して画面にテキストを描画しようとしています。この問題は、テクスチャを同時に使用するときに発生します。

次のようにテクスチャをロードします。

int テクスチャ{

        try {
            InputStream in = new FileInputStream(filelocation);
            PNGDecoder decoder = new PNGDecoder(in);
            ByteBuffer buffer = BufferUtils.createByteBuffer(4
                    * decoder.getWidth() * decoder.getHeight());
            decoder.decode(buffer, decoder.getWidth() * 4, Format.RGBA);
            buffer.flip();
            in.close();
            //glBindTexture(GL_TEXTURE_2D, Texture);
            glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER,
                    GL_NEAREST);
            glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER,
                    GL_NEAREST);
            glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, decoder.getWidth(),
                    decoder.getHeight(), 0, GL_RGBA, GL_UNSIGNED_BYTE,
                    buffer);
            glBindTexture(GL_TEXTURE_2D, 0);
        } catch (FileNotFoundException ex) {
            System.err
                    .println("Textures are not in their correct location.");
            Display.destroy();
            System.exit(1);
        } catch (IOException ex) {
            System.err
                    .println("Textures are not in their correct location.");
            Display.destroy();
            System.exit(1);
        }
    }

そして、このような私のフォント

public static void load(float size) {

    try {
        InputStream inputStream = ResourceLoader.getResourceAsStream(filelocation);

        Font awtFont = Font.createFont(Font.TRUETYPE_FONT, inputStream);
        awtFont = awtFont.deriveFont(size);
        fontname = new TrueTypeFont(awtFont, true);

    } catch (Exception e) {
        e.printStackTrace();
    }   
}

何が起こっているのかというと、入力ストリームが「混同」され、読み込んだテクスチャで必要なテキストが描画されるということです。

ゲーム ループの前に Font.class からフォントを読み込み、テクスチャは、ゲーム ループ中に呼び出される、それらが使用されているクラスから読み込まれます。

問題をグーグルで検索しましたが、何も見つかりません。ご理解いただけましたら、よろしくお願いいたします。

4

1 に答える 1

0

InputStreams が混同されるというよりも、テクスチャ バインディングである可能性が高くなります。Texture クラスでは、次の行がコメント アウトされています。

//glBindTexture(GL_TEXTURE_2D, テクスチャ);

これにより、GL_TEXTURE2D に以前にバインドされていたものにテクスチャ イメージが読み込まれ、以前のテクスチャが置き換えられます。

glTexImage2D で画像をロードする前に、テクスチャをバインドする必要があります

于 2012-05-06T19:58:34.243 に答える