【问题标题】:loading texture from folder从文件夹加载纹理
【发布时间】:2013-02-20 06:17:13
【问题描述】:

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

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

【问题讨论】:

    标签: java textures embedded-resource jogl application-resource


    【解决方案1】:
    // 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 加载方法的重载形式。

    【讨论】:

      【解决方案2】:

      我认为你的问题只是你在 res 之前缺少一个斜杠。这肯定会奏效:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-09-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多