问题标签 [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 投票
2 回答
2729 浏览

opengl-es - 如何从 mipmapping 中消除纹理接缝

我在地形的片段着色器中使用纹理混合来从一个纹理混合到下一个纹理。就在仅使用我的草纹理和混合泥土/草或雪/草纹理之间的接缝处,mipmap 似乎造成了丑陋的接缝(见下图)。禁用 mipmapping 可以解决问题,但会使我的地形在远处变得非常粗糙/难看。有没有办法在不禁用 mipmapping 的情况下消除这种接缝?


地形-vs.glsl:

地形-fs.glsl:


纹理管理器::初始化


配置:

  • 视窗 7 专业版 SP1
  • 谷歌浏览器 24.0.1312.57 m
  • 英伟达 GTX 680

正常视图 正常视图

放大 放大

0 投票
4 回答
15180 浏览

java - libgdx 纹理过滤器和 mipmap

当我尝试在 LibGDX 中使用 mipmap 过滤时,没有图像出现。

我是 LibGDX 的新手,我有一个简单的 2d 场景,其中包含三个旋转、缩放的圆圈。为了消除它们的锯齿,我想使用线性过滤。作为建议,我查看了这篇文章,它说,对于大规模缩放的图像,可以使用 mipmap 来提高速度或质量。

第一个意外的出现是,尽管我的所有图像都按比例缩小,但如果 magFilter 是线性的,我只会看到线性过滤器。换句话说:

此代码将显示缩小图像的线性过滤器:

虽然此代码不会:

这似乎与 libGDX 功能相反:

这不会打扰我,只是它表明 libgdx 是错误的(不太可能),文章是错误的(不太可能),或者我不了解纹理过滤器。当我尝试 mipmap 过滤器时,后者似乎特别有可能。

此代码不显示任何内容

此代码显示,但最近过滤

任何我错在哪里的解释将不胜感激。我在其他地方搜索过,但 libGDX 中的纹理过滤器非常具体,所以除了文章之外,我没有找到太多帮助。

0 投票
1 回答
1123 浏览

opengl - 有没有办法在 GLSL 1.2 片段程序中访问 mipmap?

我想在我的 GLSL 片段程序中访问不同级别的详细信息。我目前坚持使用旧版 OpenGL,包括 GLSL 1.2。不幸的是,我无法控制它。

我看到该texture2DLod()方法存在,但它似乎只能在顶点程序中使用。

我已经阅读了这个问题,但他们似乎正在使用 GLSL 1.4 或更高版本。不幸的是,我没有那个选项。

GLSL 1.2 片段程序中是否有任何方法可以对特定的 mipmap 级别进行采样?

如果没有直接执行此操作的功能,是否可以在不执行 8 个副本的情况下将 mipmap 作为单独的纹理发送?

0 投票
1 回答
7849 浏览

c++ - OpenGL 中的 Mipmap

我在让 mipmap 工作时遇到了很多麻烦。我使用的是 OpenGL 1.1,而且我没有 glu,所以我使用以下纹理初始化代码:

变量:

tex是一个包含纹理 mipmap 像素数组列表的数组。mipmap 被正确处理(我单独测试了它们)。mipmaps是将原始图像缩小为 1x1 像素纹理的 mipmap 的数量(原始纹理为 256x256 - 因此在代码中的这一点为 8)。是原始纹理的尺寸(256x256)widthheight

结果是它甚至不使用纹理。一切都只是呈现平坦的灰色(由于照明而呈灰色)。

有什么我忘记了吗?我检查了这个参考,我找不到任何冲突。

其他细节:总的来说,我启用了 GL_DEPTH_TEST、GL_TEXTURE_2D、GL_LIGHTING、GL_CULL_FACE、GL_FOG(和 GL_LIGHT0、GL_LIGHT1,它们可能没有什么区别)。另外,我正在使用 Mesa 3D 的 OpenGL 实现(Mesa 4.0 版,可转换为 OpenGL 1.3 版),如果这可能与它有关的话。

编辑:

问题是,当我将 GL_NEAREST_MIPMAP_NEAREST 更改为 GL_NEAREST 时,纹理工作正常(不使用 mipmap)。所以,我看不出它怎么可能是任何其他代码——至少我想不出它可能是什么。

0 投票
1 回答
1802 浏览

opengl-es - 优化基于 OpenGL 的动画/可缩放 2D UI 渲染的策略

我已经为我的应用程序的 UI 构建了一个基于场景图的渲染系统(如果您好奇,请访问http://audulus.com )。该应用程序的 UI 是程序化的,其中很多是动画的。很少有预渲染的图像。

目前,它在 mipmap 纹理中缓存不变的可绘制组。我使用 mipmaps 因为 UI 是可缩放的。总的来说,这是一个巨大的性能胜利,但也有几个缺点:

  1. 构建 mipmap(通过 glGenerateMipmap)需要时间,当 UI 的一部分从动画变为静态时会降低帧速率。

  2. 纹理缓存几何体与非纹理缓存几何体之间的视觉差异,导致轻微闪烁。(也许可以通过更聪明地使用我的路径渲染代码来解决这个问题,但这似乎很难)

  3. 所有纹理的内存使用情况(我可以转储屏幕外纹理,但这会加剧问题 1)

我想到的几种替代方法:

  1. 代替纹理缓存,将静态路径合并为更大的路径。我的路径已经基于 VBO/VAO,但这可以减少 GL 调用的数量。(关闭纹理缓存时,我的性能主要受 CPU 限制)。在内存使用方面大获全胜。这种方法的主要问题是:使我的路径渲染着色器复杂化(因为它必须在一次调用 glDrawArrays 中处理具有不同属性的路径),不处理其他基元(例如文本)的缓存,以及更多的 GPU 负担而不是简单地渲染纹理。

  2. 仍然使用纹理,但要避免 mip-mapping。随着 UI 的缩放,可以调整纹理的大小(尽管这可能必须推迟,因为在缩放期间重新渲染整个 UI 成本太高)。删除屏幕外几何体的纹理。缺点当然是 UI 缩放期间纹理放大/缩小效果不佳。

更新

我试过(2)。调整纹理的大小非常慢,所以我阻止 UI 在缩放期间调整它们的大小。这工作得相当好,但是从小开始缩放时放大倍率看起来很糟糕:

放大倍率差

请注意,某些模块没有被纹理缓存,因为它们被标记为动画。

更新 2

我开始研究方法 1,所以我停用了纹理缓存。

虽然我受 CPU 限制,但实际上我所有的 GPU 端负载都来自我的路径抗锯齿片段着色器。以下是它的性能:

激活路径 AA 着色器时的性能

关闭它:

禁用路径 AA 着色器时的性能

因此,进一步优化这将是 GPU 方面的一大胜利。我尝试放弃它并使用 4x 超级采样,但这看起来很垃圾,提醒我为什么要花费大量时间在路径渲染着色器上。

0 投票
3 回答
1901 浏览

opengl - 如何防止openGL中的闪烁(抗锯齿伪影)?

这是来自 openGL 超级圣经(第 5 版,第 208 页)的引述:

我目前面临着完全相同的问题,(我正在加载一个 4912 x 3264 像素的图像)并进行一些仿射变换,如旋转和平移。它显示出模糊性,尤其是在加载的纹理具有白色像素的情况下(这可能不是一般观察,但我正在观察)。这是代码:

动画很流畅,除了剧透,一切都很完美。有人可以帮助我改善这种情况,因为我正在开发一个对这些东西有很大关注的应用程序吗?

另外,如果使用后glTexImage2D,如果我使用glGenerateMipmap(GL_TEXTURE_2D),它会给segmentation fault (core dump)。知道我可能会错过什么吗?

0 投票
0 回答
790 浏览

android - 为什么我的某些 png 文件不适用于 mipmap(android opengl 应用程序)

我使用以下代码在我的 android 应用程序中创建 mipmap

它适用于我的大多数 .png 文件,但除非我关闭 mipmapping,否则其中一些文件无法正确加载(显示为空白的白色纹理)。这是在 adobe photoshop v 12.0 中全部保存为 .png 的 128 X 128 纹理上

工作的纹理似乎总是比那些不工作的纹理具有相对较大的文件大小,所以我想知道它是否有时会使用一些 android 不支持的更新压缩,如果是,我该如何关闭它. 这是非常令人沮丧的,任何帮助将不胜感激。

PS我正在使用摩托罗拉atrix来测试应用程序

0 投票
1 回答
327 浏览

opengl - GL_GENERATE_MIPMAP 与 GL_MAX_TEXTURE_SIZE

GL_GENERATE_MIPMAP如果我们使用(or )为纹理生成 mipmap,glGenerateMipmap原始纹理可以有多大?是返回的大小GL_MAX_TEXTURE_SIZE还是它的一半?

0 投票
1 回答
1916 浏览

ios - 任何人在 iOS 上的 OpenGL ES 2.0 中使用 glGenerateMipmap 得到模糊的不可用纹理?

我能够使用 glGenerateMipMap 生成 mipmap,我正在使用 min_filter gl_linear_mipmap_linear。

如果没有 mipmap,当显示与实际纹理大小 (512x512) 大致相同时,纹理看起来很好(如预期的那样),但当我缩小时(如预期的那样)会显示锯齿效果。

使用 mipmap 时,纹理看起来与实际纹理大小 (512x512) 大致相同(如预期的那样),并且在我缩小时(如预期的那样)不显示锯齿效果。然而,我得到难看的模糊纹理,这使得 mipmap 版本无法使用,以至于我可以忍受锯齿。

知道我在这里可能做错了什么吗?我不知道生成的 mipmap 是否最终看起来像那样,或者当它应该选择一个更大的时,是否选择了一个太小的 mipmap。有没有人在 iOS 上的 OpenGL ES 2.0 上使用 glGenerateMipMap 得到了很好的结果?

0 投票
1 回答
1035 浏览

json - 三.js DDS Json UV Mapping问题

我已经搜索了互联网,但我没有找到这个问题的正确答案。我注意到很多人都在问同样的想法。

我有一个从 3D max 导出的 JSON 文件,其中包含 UV 信息。我正在尝试加载带有应用于 Three.js 的 DDS 图像的 JSON 文件。(使用 THREE.ImageUtils.loadCompressedTexture) DDS 图像是从 Photoshop 导出的。

图像被加载到对象上,但被拉伸(我认为这是由于 DDS 文件不再是矩形,因为它包含多个 mipmap)。

如何告诉 three.js 使用的图像是 DDS 文件?

先感谢您。

我整理了一个现场演示。链接如下:http ://aeche.eu/DDS/DDS.html 左边是正确使用的JPG文件,右边是DDS文件。

这是原始 JPG 图片:http ://aeche.eu/DDS/art/cubeJPG.jpg

这是使用 DDS 文件的多维数据集的代码: