【问题标题】:how to decompression texture in android opengl es 2.0如何在android opengl es 2.0中解压纹理
【发布时间】:2017-02-21 22:51:22
【问题描述】:

我有一个 ETC1 压缩纹理。我正在使用下面的代码来解压缩和加载它,

 public void LoadCompressedTexture()
{
    GLES20.glGenTextures(1, bg_grid_tex_id, 0);

    InputStream input = mContext.getResources().openRawResource(R.raw.compressed_tex);
    GLES20.glBindTexture(GLES20.GL_TEXTURE_2D,bg_grid_tex_id[0]);

    GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MIN_FILTER, GLES20.GL_LINEAR);
    GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MAG_FILTER, GLES20.GL_LINEAR);
    try{
        ETC1Util.loadTexture(GLES20.GL_TEXTURE_2D, 0, 0,GLES20.GL_RGB, GLES20.GL_UNSIGNED_SHORT_5_6_5, input);
    }
    catch(IOException e){
        System.out.println("DEBUG! IOException"+e.getMessage());
    }
}

我得到了预期的图像形状,但尺寸很小,剩余部分用黑色填充。

有什么办法可以在解压前设置高宽,让解压后的图片大小发生变化??

【问题讨论】:

    标签: android opengl-es textures opengl-es-2.0


    【解决方案1】:

    你能分享原始压缩的 PKM 图像文件吗?

    首先,您的压缩器是否配置为将宽度和高度四舍五入到最接近的一或二次方,从而用黑色填充图像?如果是这样,请离线修复此问题(不要填充)或调整纹理坐标。

    其次,如果输入的纹理正确,那么屏幕上的纹理大小与纹理图像的大小无关;它取决于三角形的输入几何形状和每个顶点的纹理坐标。你是如何在屏幕上绘制四边形的?

    【讨论】:

    • vertices = new float[] { 0.0f, 0f, 0.0f, mScreenWidth, 0.0f, 0.0f, 0f, mScreenHeight, 0.0f, mScreenWidth, 0.0f, 0.0f, mScreenWidth,mScreenHeight, 0f, 0f, mScreenHeight, 0.0f, }; textureCords = new float[]{ 0.0f,1.0f, 1.0f,1.0f, 0.0f,0.0f, 1.0f,1.0f, 1.0f,0.0f, 0.0f,0.0f, }; GL_TRIANGLES,0,6 ;
    • 使用上面的顶点和线我正在使用 GLES20.glDrawArrays(GLES20.GL_TRIANGLES,0,6); 绘制四边形
    • 解压后的纹理大小为1024*1024
    • 用于压缩的位图大小为 531*754
    • 因此,看起来您的压缩器正在四舍五入到最接近的二的幂并填充图像。你只需要调整你的纹理坐标来裁剪填充;例如使用 0.0 -> 0.518 作为宽度,使用 0.0 -> 0.736 作为高度。
    猜你喜欢
    • 2012-04-08
    • 1970-01-01
    • 2011-05-19
    • 2016-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多