java - 从文件夹加载纹理

标签 java textures embedded-resource jogl application-resource

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

我将如何修改上述代码以在项目中的文件夹中查找纹理?

最佳答案

// 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加载方法的重载形式。 .

关于java - 从文件夹加载纹理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14973452/

相关文章:

java - 如何序列化一个 lambda?

java - 这些代码遵循什么设计模式?

java - logback 在 Spring boot 中不起作用

iPhone OpenGLES 纹理 - 色带

java游戏图片不显示

java - 执行加载命令时出错 : org. hibernate.exception.SQLGrammarException: 无法在线程 "main"中提取 ResultSet 异常

opengl - 如何在纹理中使用 OpenGL LOD?

c# - 如何像 Unity 编辑器一样以编程方式将纹理加载到图像中?

java - 为什么我的纹理不起作用?

c# - 运行时出现 XamlParseException。从 x :Static to a relative component string to reference an image fixes it. 切换 为什么?