我发现了一个3D图形架构的Android称为拉贾瓦利和我学习如何使用它。 我跟着它渲染shpere物体的纹理1024×512大小的JPG图像最基本的教程。 它的工作罚款Galaxy Nexus的,但它并没有对银河队球星GB70工作。
当我说没有工作,我的意思是对象出现,但质地不会被渲染。 最后,我改变了一些参数,我在创建纹理时使用的拉贾瓦利框架,并得到它的工作。 下面是我发现了什么。
原因是从那里未来GL_TEXTURE_MIN_FILTER
正在设置。 在下面四个值
GLES20.GL_LINEAR_MIPMAP_LINEAR
GLES20.GL_NEAREST_MIPMAP_NEAREST
GLES20.GL_LINEAR
GLES20.GL_NEAREST
当纹理只呈现GL_TEXTURE_MIN_FILTER
使用纹理贴图未设置为一个过滤器。 所以,当GL_TEXTURE_MIN_FILTER
设置为最后两个它的作品。
现在这里是什么,我不理解和感到好奇。 当我缩小我使用它作为纹理512×512大小的图像GL_TEXTURE_MIN_FILTER
设置无关紧要。 所有四个设置最小过滤作品。
所以我的问题是,是否有对图像的使用MIN滤波器的纹理时,尺寸的要求? 比如我需要什么用的形象是方? 其他的东西,如包装风格或者MAG过滤器的配置可以是一个问题?
或者它看起来像设备的OpenGL实现的错误?
早上好,这2个纹理非权力的一个典型例子。
纹理必须是2的幂在他们的原因有多种分辨率,这是一个很常见的错误,它没有发生在大家陷入这个陷阱:)过我。
这2个纹理非权力在某些设备/ GPU工作顺利进行的事实,仅仅依赖于OpenGL驱动程序执行,一些GPU支持他们清楚,有些则没有,我强烈建议你去POW2纹理为了能够以保证所有设备的功能。
2个纹理最后但并非最不重要的,使用非权力会导致你在GPU内存利用率cathastrophic scenarious以来,其中大部分接受非powerof2纹理的驱动程序,需要在内存中的纹理重新调整,以2的倍数最接近的高功率。 例如,具有520X520的纹理可能导致1024×1024的实际存储器映射。
这是你不想要的东西,因为在现实世界中“大小事项”,特别是在移动设备上。
您可以在OpenGL的黄金书显示,OpenGL ES 2.0的一个相当不错的解释:
在OpenGL ES 2.0,纹理可具有非功率的二(npot)的尺寸。 换句话说,宽度和高度不需要为二的力量。 然而,OpenGL ES 2.0的确实对如果该纹理尺寸不是的两个功率可用于涡卷模式的限制。 也就是说,npot纹理,涡卷模式只能是GL_CLAMP_TO_EDGE和minifica-灰滤波器只能是GL_NEAREST或GL_LINEAR(换句话说,不MIP-映射)。 扩展GL_OES_texture_npot放松这些限制,并允许GL_REPEAT和GL_MIRRORED_REPEAT的包装模式,并允许npot纹理与全套缩小滤波器来mipmapped。
我建议你,因为它做了相当不错覆盖到这个话题评价这本书。