【问题标题】:Issue with mipmaps with custom sizes in WebGL2WebGL2 中具有自定义大小的 mipmap 问题
【发布时间】:2018-12-26 06:54:41
【问题描述】:

AFAIK,WebGL2 对纹理大小没有限制,在 WebGL1 中应该是 2 的幂。但是,使用 WebGL2,我尝试为具有自定义大小(不是 2 的幂)的 DDS 格式的压缩纹理生成 mipmap,并且总是遇到异常:“级别 0 不是 2 的幂......”。我已经尝试过一个 mipmap 级别和 miltiple 级别。没运气。它仅在大小为 2 的幂时有效。有人知道为什么吗?我已经尝试过使用 imagemagick 之类的工具创建的 mipmap 以及在运行时使用 gl.generateMipmap(target) 生成的 mipmap。没有运气。

【问题讨论】:

  • 我对 WebGL2 mipmap 知之甚少,但是您是否禁用了 CLAMP_TO_EDGE 以便它可以通过复制或镜像或其他扩展方法扩展图像来使用超出边缘的“虚拟像素”?
  • 不要每天使用 DDS,据我记得 DXTn 使用 4x4 块(根据维基百科)并且必须是 2 的幂,但这个限制也可能来自您的硬件。您是否尝试使用外部工具link 验证您的纹理。您如何准确加载纹理以在 Full Screenquad texture reference 或其他东西上绘制?
  • @fmw42 我没有使用 CLAMP_TO_EDGE。我只设置了 TEXTURE_MAG_FILTER 和 TEXTURE_MIN_FILTER
  • 可能 CLAMP_TO_EDGE 是默认值吗?另外,WebGL2 可能支持,但是 DDS 格式支持吗?
  • @Nabr “不要每天使用 DDS”是什么意思?我只想要带有 mipmap 的压缩图像,以便在放大/缩小时图像质量看起来不错(通过缩放矩阵实现)。我通常使用 webgl2fundamentals webgl2fundamentals.org/webgl/lessons/webgl-3d-textures.html DDS 中描述的着色器,其中 mipmaps 是使用 Compressonator compressonator.readthedocs.io/en/latest/gui_tool/index.html 创建的,我还使用 parse-dds 来解析 DDS。这是一个示例:github.com/Jam3/parse-dds/blob/master/demo/index.js

标签: webgl2


【解决方案1】:

DXT 绝对适用于非 POT 纹理。它使用 4x4 块,因此它适用于任何尺寸为 4 倍数的图像。您必须遵循此规则。最初,我的纹理的宽度/高度没有 4 的倍数。我尝试了 DXT5,mip 级别的宽度/高度是 4 的倍数,一切正常。谢谢。

【讨论】:

  • 很高兴您终于找到了可行的解决方案!一些想法,题外话:DXT 希望在放大时提高图像质量。它只是一种 GPU 友好格式,可以节省解压缩时间。规则是:拉进去,拉出来。确保你有一个良好的品质开始。还可以以更 Photoshop 的方式查看:您可以在 CPU 上实现bicubic filter maybe direct in glsl。结合用户放大/缩小时增加/减少过滤等用户交互。
猜你喜欢
  • 2011-04-23
  • 2019-07-24
  • 2020-11-30
  • 2014-09-02
  • 1970-01-01
  • 2018-05-18
  • 2022-05-30
  • 2011-10-24
  • 2012-06-04
相关资源
最近更新 更多