Загрузка текстуры из папки
У меня проблема с загрузкой JPEG на сферу. В настоящее время единственный способ, с помощью которого я смог заставить это работать, состоит в том, чтобы изображение было в том же пакете, что и загружаемый им класс. Проблема в том, что я не хочу, чтобы в одном пакете было более 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" };
Как бы я изменил приведенный выше код для поиска текстур в папке в проекте?
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");
В этом примере мы используем перегруженную форму TextureIO
Метод загрузки API в newTextureData(URL,boolean,String)
,
Я думаю, что ваша проблема только в том, что вы пропускаете косую черту перед разрешением. Это определенно будет работать:
this.getClass().getResource("/res/img.jpg");
пока пакет res находится в вашей папке src.