问题标签 [mipmaps]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
12 回答
192381 浏览

android - 用于图标的 Mipmap 可绘制对象

从 Android 4.3 (Jelly Bean) 开始,我们现在可以使用res/mipmap文件夹来存储“mipmap”图像。

例如,Android 版 Chrome将其图标存储在这些文件夹中,而不是更普通的res/drawable文件夹中。

这些 mipmap 图像与其他熟悉的可绘制图像有何不同?

我看到在我的清单中,我们使用了@mipmap/限定符,而不是@drawable/,考虑到资源文件夹名称,这很有意义:


参考:

Android 4.3 APIs文档有以下说法:

使用 mipmap 作为位图或可绘制对象的源是提供高质量图像和各种图像比例的简单方法,如果您希望图像在动画期间进行缩放,这将特别有用。

Android 4.2(API 级别 17)在 Bitmap 类中添加了对 mipmap 的支持——当您提供 mipmap 源并启用 setHasMipMap() 时,Android 会交换 Bitmap 中的 mip 图像。现在在 Android 4.3 中,您也可以为 BitmapDrawable 对象启用 mipmap,方法是提供 mipmap 资源并在位图资源文件中设置 android:mipMap 属性或调用 hasMipMap()。

我没有看到任何可以帮助我理解的东西。


XML 位图资源有一个android:mipMap属性:

布尔值。启用或禁用 mipmap 提示。有关详细信息,请参阅 setHasMipMap()。默认值为假。

据我所知,这不适用于启动器图标。


这个问题是在 Google Groups 上提出的(资源名称“mipmap”的目的?!),Romain Guy 回答:

以通常会计算的较大分辨率提供图像很有用(例如,在 mdpi 设备上,Launcher 可能希望较大的 hdpi 图标显示较大的应用程序快捷方式。)

我觉得这几乎是有道理的,但不完全是。

我仍然倾向于使用 Randy Sugianto 的后续行动:

这样做有什么好处?是否有任何指南如何使用 mipmap,可能是为了更好的启动器图标?


当然,Wikipedia 有一个“Mipmap”页面,它指的是 1983 年发明的一种较旧的技术,我与当前的 Android 实现不太相关。


这些天我们是否应该将所有应用程序图标存储在res/mipmap文件夹中,这些 mipmap 图像的指导方针是什么?


更新#1

这是一篇试图解释它的博客文章。

但是该博客文章中使用的图像显示了一个包含许多徽标的文件。这不是我在 Chrome 的 mipmap 文件夹中看到的。

Chrome 的mipmap-hdpi文件夹包含三个图像。一个是 Chrome 标志,它自己。

Chrome mipmap-hdpi 图标.png

奇怪的是,它是 72x72,而不是我希望看到的 48x48。

也许这就是全部 - 我们只需要在 mipmap 文件夹中保留更大的图标?


更新#2

2014 年 10 月 23 日的 Android 开发者博客文章再次确认了使用mipmap文件夹作为应用程序图标的想法:

在谈到 Nexus 6 的屏幕密度时,作者写道:

最好将您的应用程序图标放置在 mipmap- 文件夹(而不是 drawable- 文件夹)中,因为它们使用的分辨率与设备的当前密度不同。例如,可以在 xxhdpi 设备的启动器上使用 xxxhdpi 应用程序图标。


更新#3

请注意,Android Studioic_launcher.png在文件夹中创建图标,mipmap...而不是在drawable...Eclipse 用来创建图标的文件夹中。


0 投票
1 回答
1327 浏览

textures - 使用 mipmap 的 WebGL 纹理平铺边缘伪影

我正在使用需要 mipmap 看起来不错(不可协商)的纹理在 WebGL 中平铺表面。因为 WebGL 不支持用于 mipmap 纹理的 gl.REPEAT 包装模式,所以我在片段着色器中使用“fract(texcoord)”自己钳制纹理坐标。

结果,我在纹理的边缘得到了伪像,因为“fract(texcoord)”环绕,因此使 GPU 认为它只需要一个低细节的 mipmap。

如果这是普通的 OpenGL,我可以使用 textureGrad 告诉 GPU 真正的渐变,但不幸的是,这在 WebGL 中不可用。

有什么建议么?我知道 http://0fps.net/2013/07/09/texture-atlases-wrapping-and-mip-mapping/中描述的 4-tap 技巧,但这似乎有很多额外的开销,只会使影响较轻,不会完全消失。我还在Threejs Custom Shader - Screen Tearing中看到了使用纹理的 'lod' 参数的建议,但这并不能完全解决问题(此外,答案是从 2012 年开始的,所以现在可能有更好的解决方案?)。

0 投票
2 回答
21250 浏览

opengl - 如何访问 GLSL 片段着色器纹理中的自动 mipmap 级别?

在 GLSL 片段着色器中对纹理进行采样时,如何确定使用的 mipmap 级别?

我知道我可以使用以下textureLod(...)方法手动采样纹理的特定 mipmap 级别:

texture(...)或者我可以允许使用like自动选择 mipmap 级别

我更喜欢后者,因为我更相信驱动程序对适当 mipmap 级别的判断,而不是我自己的判断。

但是我想知道在自动采样过程中使用了什么mipmap级别,以帮助我合理地采样附近的像素。GLSL 中有没有办法访问有关自动纹理样本使用的 mipmap 级别的信息?

0 投票
1 回答
1141 浏览

java - 将 mipmapping 绘制为黑色方块的 LibGDX 字体

我遇到了一些关于 LibGDX 过滤的问题。字体可以在不使用 mipmap 的情况下正常工作,但是当我添加它们时,文本会呈现为一系列黑框。

这是我用来生成字体的方法。

没有 mipmap: 没有 mipmap

使用 mipmap: 使用 mipmap

0 投票
1 回答
422 浏览

android - Android OpenGL ES 2:不使用 ARGB8888 时 mipmap 中的垃圾

我的源图像是 512x512 jpegs。设备是 Galaxy Tab 2。

当使用下面的代码(解码为 32 位)时,我的 mipmap 会完美生成:

2 级 Mipmap,完美
但是,为了将内存使用量降至最低,我更愿意将图像加载为 16 位。RGB_565 最有意义,因为没有 alpha 信息。我尝试通过更改以下几行来做到这一点:

使用 565 会在 1 级以上产生这个讨厌的 mipmap。0级仍然是完美的。 RGB565 Level1

最后一件事。如果我在生成 mipmap 之后将过滤器模式行移到,则 mipmap 没有红色调,但它们看起来也不正确。

诡异的

另外,如果我使用Config.ARGB_4444and GLES20.GL_UNSIGNED_SHORT_5_6_5,红色会变成黄色,看起来还不错:

ARGB_4444 Level1

请!有人解释了为什么会这样

0 投票
1 回答
369 浏览

opengl - glGenerateMipmap 需要哪个内存屏障?

我已经使用 GL_ARB_shader_image_load_store 写入了纹理的第一个 mipmap 级别。文档指出,在我在其他操作中使用此图像的内容之前,我需要调用 glMemoryBarrier,以便适当地刷新缓存。

例如,在我执行 glTexSubImage2D 操作之前,我需要发出 GL_TEXTURE_UPDATE_BARRIER_BIT​,在我使用对纹理进行采样的着色器发出绘制调用之前,我需要发出 GL_TEXTURE_FETCH_BARRIER_BIT​。

但是,在确保 glGenerateMipmap 将使用最近写入的数据之前,我需要发出哪个障碍?

0 投票
1 回答
105 浏览

opengl - 使用mipmap技术映射纹理是否可以节省能源?

在映射纹理时使用 mipmap 可以提高渲染速度并减少伪影。最近,我写了一个测试平台来表征 3D 图形的功耗,我发现当我使用 mipmap 技术时,应用程序会消耗更多的电量!合理吗?而且,性能是否与映射到对象的图像大小有关?

0 投票
1 回答
889 浏览

opengl-es - Opengl 无缝纹理

在 andrid 上的 opengl es 中,当我将两个纹理并排放置时,有一个轻微的接缝,您可以在其中看到它们后面的绘制对象。基本上看起来像一个小差距。我将其缩小到 mipmapping

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);

如果我将它们都设置为 GL_NEAREST 接缝消失但纹理看起来像垃圾。我在这里还有其他选择吗?

0 投票
1 回答
2362 浏览

c++ - 对 glGenerateMipmap 的未定义引用(使用 GLEW)

最近了解到OpenGL API上的glGenerateMipmap()等函数需要特定的OS加载。GLEW 是一个包装器,它应该为此目的为您完成工作。所以我将 GLEW 添加到我的项目中。但是,当我在代码中编译该函数时,它会给出错误:

我认为这将是一个链接器错误,但到目前为止,其他 gl 函数都可以正常工作。事实上,我已经在这个 OpenGL 项目上工作了一段时间,没有出现链接器错误。这可能是一个错误吗?使用代码块,Windows 7 64 位。

0 投票
1 回答
1412 浏览

javascript - 尝试在 three.js 中使用 mipmaping 时出错

我正在尝试在three.js纹理中使用 mipmaps 生成。

创建纹理时,我将大小为 512x512 的图像分配给 mipmaps[0]。
因此,如果我的理解是正确的,WebGL 应该使用这个图像来生成更小的 mipmap 纹理。但后来我看到一个黑色的纹理渲染和这样的错误:

在 chrome

WebGL:drawElements:绑定到纹理单元 0 的纹理不可渲染。它可能不是 2 的幂并且具有不兼容的纹理过滤或不是“纹理完整”。或者纹理是具有线性过滤的浮点或半浮点类型,而 OES_float_linear 或 OES_half_float_linear 扩展未启用。

在火狐中

错误:WebGL:根据 OpenGL ES 2.0.24 规范第 3.8.2 节,纹理将被渲染为黑色,因为它是 2D 纹理,具有需要 mipmap 的缩小过滤器,而不是 mipmap完整(定义见第 3.7.10 节)。

创建纹理的代码如下所示:

使用画布而不是图像的同样问题。

澄清:

  • 图像是 2 的幂
  • 图片已经加载

有人可以告诉我在哪里挖掘这个问题吗?