1

JPEG を球体にロードする際に問題が発生しています。現在、これを機能させる唯一の方法は、イメージをロードするクラスと同じパッケージにイメージを含めることです。問題は、クラスが混在する 1 つのパッケージの下に 500 以上のテクスチャをすべて持ちたくないということです。組織上の理由から、フォルダーとサブフォルダーに入れたいと思います。

テクスチャが同じパッケージにある場合、これは機能します。

InputStream iStream = null;

    try
    {
        iStream = getClass().getResourceAsStream(imageFile);
        TextureData data = TextureIO.newTextureData(iStream, false, null);
        testTex[i] = TextureIO.newTexture(data);
        testTex[i].getImageTexCoords();
        testTex[i].setTexParameteri(GL2.GL_TEXTURE_MAG_FILTER, GL2.GL_LINEAR);
        testTex[i].setTexParameteri(GL2.GL_TEXTURE_MIN_FILTER, GL2.GL_NEAREST);
        iStream.close();
        ...

画像を取得するメソッドは、次の形式で取得します。

String[] texture = { "bar1.jpg", "bar2.jpg" }; // imageFile is whichever is called

上記のコードは完全に機能しますが、欠点は、テクスチャを呼び出しているクラスと同じパッケージ内にすべてのテクスチャを格納する必要があることです。しかし、プロジェクト内のフォルダーからこのようなテクスチャを呼び出したい:

String[] texture = { "res/foo/bar2.jpg", "res/foo/bar2.jpg" };

プロジェクト内のフォルダー内のテクスチャを検索するには、上記のコードをどのように変更すればよいですか?

4

2 に答える 2

2
// note leading '/' - indicates 'search from root of class-path'
String[] texture = { "/res/foo/bar2.jpg", "/res/foo/bar2.jpg" };
// ...
URL iUrl = getClass().getResource(texture[0]);
TextureData data = TextureIO.newTextureData(iUrl, false, "jpg");

この例では、 のTextureIOAPI ローディング メソッドのオーバーロードされた形式を使用しnewTextureData(URL,boolean,String)ます。

于 2013-02-20T06:26:01.190 に答える
2

あなたの問題は、 res の前にスラッシュがないことだけだと思います。これは間違いなく機能します:

this.getClass().getResource("/res/img.jpg");

res パッケージが src フォルダーにある限り。

于 2013-02-20T06:26:25.827 に答える