0

我在 opengl-es-2.0 中以相对于观察者(地板)的大角度渲染纹理。在支持各向异性过滤的硬件上,一切都很好。但是,我需要支持一些硬件中没有此功能的设备(没有 GL_EXT_texture_filter_anisotropic)。

关闭 mipmap 后,远处的纹理清晰,但正如预期的那样,我有莫尔图案。启用 mipmap 后,莫尔图案消失了,但远处的纹理变得模糊(再次,正如预期的那样)。

没有各向异性过滤的硬件有什么替代方案吗?在片段着色器中这样做是否可行(恐怕只有opengl-es-2.0)?任何地方的示例代码?我确实在椭圆加权平均过滤上找到了http://www.pmavridis.com/ewa.html,我想这可以实现,但是示例代码使用了底层的各向异性硬件过滤,并且无论如何使用了 opengl 上不可用的大量东西- es-2.0。

我的目标不是高帧率,而是良好的图像质量。

4

1 回答 1

2

你的 mipmap 的三线性过滤改进了一些事情:

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);

Mipmap 偏差将提高清晰度。它可能会引入一些摩尔纹,但远不如完全禁用 mipmap。它是通过在片段着色器中调用不同的 texture2D 重载来完成的

texture2D(yourSampler, yourTexCoords, yourMipBias);

IIRC,yourMipBias 的值为 -1 会将纹理采样锐化 1 mip 级别,您必须针对场景进行调整,但大约 -0.5 到 -1.5 可能就足够了。

我相信可以在着色器中编写自己的各向异性过滤,但我没有第一手经验。我会首先尝试这些更简单、更有效的方法,看看你是否可以通过这种方式获得不错的视觉质量。

于 2017-11-08T23:12:36.697 回答