【问题标题】:OpenGL ES black texture on Nexus SNexus S 上的 OpenGL ES 黑色纹理
【发布时间】:2011-01-24 11:21:13
【问题描述】:

在 Nexus One 上运行的 OpenGL 代码在 Nexus S 上无法正常运行。 纹理似乎没有渲染,我只剩下黑色的纹理应该是。

有人有什么想法吗?

【问题讨论】:

  • 一个好主意可能是粘贴一些代码。首先,您是否启用了纹理单元?

标签: android opengl-es opengl-es-2.0 nexus-s


【解决方案1】:

accepted answer given here 比我更深入地解决了这个问题,但是虽然这个黑屏问题确实是由于 Nexus S(和其他一些设备)对二次幂纹理的严格要求,它并不意味着纹理需要具有 Po2 的维度。

在纹理加载代码中,可能有以下几行:

        GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MIN_FILTER, GLES20.GL_NEAREST);
        GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MAG_FILTER, GLES20.GL_NEAREST);

如果修改此代码以添加两行用于夹紧,那么手机支持 nPo2 纹理,前提是其中一个可以夹紧。这是添加了钳位的代码:

        GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MIN_FILTER, GLES20.GL_NEAREST);
        GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MAG_FILTER, GLES20.GL_NEAREST);
        GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_WRAP_S, GLES20.GL_CLAMP_TO_EDGE);
        GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_WRAP_T, GLES20.GL_CLAMP_TO_EDGE);

【讨论】:

    【解决方案2】:

    Nexus S 对在 OpenGL ES 中用作纹理的图像的大小更加严格。

    纹理的大小必须为 2^n(例如 256、512、1024 等)

    【讨论】:

    • 可以不使用 GL_CLAMP_TO_EDGE 来避免这个问题吗?
    猜你喜欢
    • 2014-11-29
    • 1970-01-01
    • 2014-08-10
    • 1970-01-01
    • 1970-01-01
    • 2012-07-14
    • 1970-01-01
    相关资源
    最近更新 更多