【发布时间】: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