gpt4 book ai didi

android - OpenGL ES 2.0 纹理未在某些设备上显示

转载 作者:行者123 更新时间:2023-11-29 14:33:15 26 4
gpt4 key购买 nike

我找到了一个名为 Rajawali 的 Android 3D 图形框架我正在学习如何使用它。我遵循了最基本的教程,即使用 1024x512 大小的 jpg 图像渲染 shpere 对象作为纹理。它在 Galaxy Nexus 上运行良好,但在 Galaxy Player GB70 上不起作用。

当我说它不起作用时,我的意思是对象出现了但纹理没有被渲染。最终,我更改了一些在创建纹理时用于 Rajawali 框架的参数,并让它开始工作。这是我的发现。

原因来自设置 GL_TEXTURE_MIN_FILTER 的地方。在以下四个值中

GLES20.GL_LINEAR_MIPMAP_LINEAR
GLES20.GL_NEAREST_MIPMAP_NEAREST
GLES20.GL_LINEAR
GLES20.GL_NEAREST

纹理仅在 GL_TEXTURE_MIN_FILTER 未设置为使用 mipmap 的过滤器时渲染。因此,当 GL_TEXTURE_MIN_FILTER 设置为最后两个时,它会起作用。

下面是我不明白和好奇的地方。当我将用作纹理的图像缩小到 512x512 时,GL_TEXTURE_MIN_FILTER 设置无关紧要。最小过滤器的所有四个设置都有效。

所以我的问题是,对纹理使用最小过滤器时,是否对图像的尺寸有要求?比如我需要使用正方形的图像吗?包装样式或 mag 过滤器的配置等其他因素是否有问题?

或者它看起来像是设备的 OpenGL 实现错误?

最佳答案

早上好,这是2个纹理非幂的典型例子。

出于多种原因,纹理在分辨率中需要是 2 的幂,这是一个非常常见的错误,每个人都碰巧掉进了这个陷阱 :) 我也是。

事实上,非 2 次方纹理在某些设备/GPU 上运行顺畅,仅取决于 OpenGL 驱动程序实现,一些 GPU 清楚地支持它们,另一些则不支持,我强烈建议您按顺序使用 pow2 纹理能够保证所有设备上的功能。

最后但同样重要的是,使用非 2 次幂的纹理可能会导致 GPU 内存利用率出现灾难性的情况,因为大多数接受非 2 次幂纹理的驱动程序需要在内存中将纹理重新缩放到最近的更高次幂2 因素。例如,具有 520X520 的纹理可能导致 1024X1024 的实际内存映射。

这是您不想要的,因为在现实世界中“大小很重要”,尤其是在移动设备上。

您可以在 OpenGL 金书 OpenGL ES 2.0 中找到很好的解释:

In OpenGL ES 2.0, textures can have non-power-of-two (npot) dimensions. In other words, the width and height do not need to be a power of two. However, OpenGL ES 2.0 does have a restriction on the wrap modes that can be used if the texture dimensions are not power of two. That is, for npot textures, the wrap mode can only be GL_CLAMP_TO_EDGE and the minifica- tion filter can only be GL_NEAREST or GL_LINEAR (in other words, not mip- mapped). The extension GL_OES_texture_npot relaxes these restrictions and allows wrap modes of GL_REPEAT and GL_MIRRORED_REPEAT and also allows npot textures to be mipmapped with the full set of minification filters.

我建议您评估一下这本书,因为它对这个主题做了相当不错的介绍。

关于android - OpenGL ES 2.0 纹理未在某些设备上显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11427010/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com