当前位置: 首页 > 知识库问答 >
问题:

PKM纹理与ETC2压缩给黑屏

贲高寒
2023-03-14

我正在尝试在Android中上传pkm纹理。我能够读取图像并获得其宽度、高度

纹理加载功能:

public static int loadCompressedTexture(final Context context, final int resourceId){
        final int[] textures = new int[1];
        GLES30.glGenTextures(1, textures, 0);
        Log.w(TAG, "ETC1 texture support: " + ETC1Util.isETC1Supported());
        if (textures[0] != 0)
        {
            // Read in the resource
            InputStream in = context.getResources().openRawResource(R.raw.bodyf1pkm);
            ETC2Utils.ETC2Texture tex = null;
            try {
                tex = ETC2Utils.createTexture(in);
            } catch (IOException e) {
                Log.e(TAG,e.toString());
            }
            Log.d(TAG,"tex width: "+tex.getWidth());
            Log.d(TAG,"tex height: "+tex.getHeight());

            // Bind to the texture in OpenGL
            GLES30.glBindTexture(GLES30.GL_TEXTURE_2D, textures[0]);

            // Set filtering
            GLES30.glTexParameteri(GLES30.GL_TEXTURE_2D, GLES30.GL_TEXTURE_MIN_FILTER, GLES30.GL_NEAREST);
            GLES30.glTexParameteri(GLES30.GL_TEXTURE_2D, GLES30.GL_TEXTURE_MAG_FILTER, GLES30.GL_LINEAR);
            GLES30.glTexParameteri(GLES30.GL_TEXTURE_2D, GLES30.GL_TEXTURE_WRAP_S, GLES30.GL_REPEAT);
            GLES30.glTexParameteri(GLES30.GL_TEXTURE_2D, GLES30.GL_TEXTURE_WRAP_T, GLES30.GL_REPEAT);
            // Load texture.
            GLES30.glCompressedTexImage2D(GLES30.GL_TEXTURE_2D,0,tex.getCompressionFormat(),tex.getWidth(),tex.getHeight(),0,tex.getDataSize(),tex.getData());


        }
        return textures[0];
    }

我正在使用类似的Rajawali的ETC2Util类(https://github.com/Rajawali/Rajawali/blob/master/rajawali/src/main/java/org/rajawali3d/materials/textures/utils/ETC2Util.java)来加载数据。数据已正确加载,但纹理变黑。任何人都可以帮忙吗?

共有1个答案

华子昂
2023-03-14

我终于解决了这个问题。原来我使用的压缩格式(GL_COMPRESSED_RGBA8_ETC2_EAC)是每像素16位,当我计算每像素8位的图像大小时,这对GL_COMPRESSED_RGB8_ETC2有效

 类似资料:
  • Cocos Creator 可以直接在编辑器中设置纹理需要的压缩方式,然后在项目发布时自动对纹理进行压缩。针对 Web 平台,支持同时导出多种图片格式,引擎将根据不同的浏览器自动下载合适的格式。 配置压缩纹理 Cocos Creator 支持导入多种格式的图片(具体见下表),但是在实际游戏运行中,我们不建议使用原始图片作为资源来加载。比如在手机平台上可能只需要原图 80% 或者更少的画质,又或者是

  • Cocos Creator 3D 可以直接在编辑器中设置纹理需要的压缩方式,然后在项目发布时自动对纹理进行压缩。针对 Web 平台,支持同时导出多种图片格式,引擎将根据不同的浏览器自动下载合适的格式。 配置压缩纹理 Cocos Creator 3D 支持导入多种格式的图片(具体见下表),但是在实际游戏运行中,我们不建议使用原始图片作为资源来加载。比如在手机平台上可能只需要原图 80% 或者更少的画

  • 基于被压缩的数据,创建一个纹理贴图,例如从一个DDS文件中。 它和CompressedTextureLoader一起使用。 构造函数 CompressedTexture( mipmaps : Array, width : Number, height : Number, format : Constant, type : Constant, mapping : Constant, wrapS :

  • 使用的字符串: string='hello'+'\r\n'+'world' Java中的预期输出: out.getValue() f.write(Base64.b64Encode(Out.getValue())) F.Close() ByteArrayInputStream(压缩)); InputStreamReader(gis,“UTF-8”));

  • 我在学《欢乐合唱团》。0(我是一个新手:))在Android上,我想画一个有纹理的正方形,但我做不到。我在谷歌上搜索了很多,但我想不出答案,我只得到了一个黑色的正方形。 我设置了一个GLSurfaceView,然后是一个渲染器: 雪碧类: ShaderLoader。loadShader从文件(以res/raw格式)TextureLoader加载着色器。loadTexture从资源中加载纹理: 顶点

  • 我在《掌握Kafka Streams and ksqlDB》一书中遇到了以下两个短语,作者使用了两个术语,它们的真正含义是“压缩主题”和“未压缩主题” 他们对“日志压缩”有什么看法吗? 表可以被认为是对数据库的更新。在日志的这种视图中,只保留每个键的当前状态(给定键的最新记录或某种聚合)。表通常是从压缩的主题构建的。 用数据库的说法,流可以被视为插入。每个不同的记录都保留在此日志视图中。流通常是从