2013-02-20 69 views
1

我在将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"); 

在这个例子中,我们使用在newTextureData(URL,boolean,String)TextureIO API装载方法的重载形式。

+0

什么数据类型是“iUrl?” – SpicyWeenie 2013-02-20 06:36:33

2

我认为你的问题只是你在水库前缺少一个斜线。这肯定会工作:

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

只要res包在你的src文件夹中。