问题标签 [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.
textures - HLSL tex2D() - 梯度从何而来?
当我在像素着色器中对纹理进行采样时,纹理单元需要根据被着色像素周围的纹理渐变来选择 mipmap。
有一个功能tex2Dgrad()
可以让我手动提供有关渐变的信息,并且tex2Dlod()
可以让我手动选择 mipmap,但如果我只是调用tex2D()
,那么额外的渐变信息来自哪里?
tex2D()
是纹理映射最常见的情况,在大多数着色器中使用,但我不知道渐变的来源。Mipmapping 显然有效,因此它必须来自某个地方。
U
我想使用计算和坐标在像素着色器中使用纹理作为查找表,V
但我不希望在.tex2D()
我需要使用tex2Dlod()
来避免这种情况吗?我读到那tex2Dlod()
是较慢的tex2D()
。
opengl - 使用 SOIL - OpenGL 的奇怪的 mip 贴图相关问题
我正在使用 SOIL 生成 OpenGL 纹理。一切都很好,除了 SOIL 中的 mip 地图生成引起的远距离伪影。当我不使用标志时:
它不是人工制品,但看起来很糟糕。有人见过这样的文物吗?在水面上,有栗色,在沙滩上,它看起来像浅绿色/蓝色失真。
这是它的样子:
opengl - OpenGL中一个纹理有多少个mipmap
没关系,我是第一个创建纹理的人,我应该非常清楚我为它加载/生成了多少个 mipmap。我这样做是为了进行单元测试。似乎没有glGetTexParameter
参数可以找出这一点。我最接近的是这样的:
无论如何,glGetTexLevelParameter()
如果我使用 NVidia GPU,将为不存在的 mipmap 返回 0 宽度,但使用 Mesa,它会返回GL_INVALID_VALUE
,这让我相信这是非常错误的事情。
如何找出我填充了纹理的 mipmap 级别?
ios - iOS glGenerateMipmap 是同步的,还是可能是异步的?
我正在开发一个在 OpenGL ES 中使用大纹理的 iPad 应用程序。当场景第一次加载时,我在天花板上看到了一个巨大的黑色伪影,持续了几帧,如下图所示。就好像尚未填充更高级别的 mipmap。在随后的帧中,天花板正确显示。
当我开始使用 mipmapping 时,这个问题才开始出现。一种可能的解释是 glGenerateMipmap() 调用异步完成它的工作,产生一些 mipmap 创建工作者(在单独的进程中,或者可能在 GPU 中)并返回。
这是可能的,还是我叫错了树?
ios - 如何处理由“平方”纹理引起的纹理失真,以及与 mipmapping 的交互?
假设我有一个自然不是正方形的纹理(例如,具有 4:1 纵横比的东西的摄影纹理)。假设我想使用 PVRTC 压缩在 iOS 设备上显示这个纹理,这要求纹理是方形的。如果我将纹理按比例放大,使其在压缩过程中呈正方形,则当从远处查看纹理时,结果是非常模糊的图像。
我相信这是由 mipmapping 引起的。由于 mipmap 过滤器看到新的更大的拉伸维度,它使用它来选择低 mip 级别,这实际上是不正确的,因为这些像素只是被拉伸到那个大小。如果它看另一个维度,它会选择更高分辨率的 mip 级别。
通过以下观察(在某种程度上)证实了这一理论,即如果我将纹理保留为不必是方形的格式,则 mipmap 版本看起来很花哨。
有一个 LOD Bias 参数,但文档说这适用于两个维度。似乎需要的是一种偏向 LOD 的方法,但仅在一个维度上(也就是说,将其偏向于在放大的纹理维度上的更高分辨率)。
除了切碎几何体以允许使用原始纹理的方形子集(这是不可行的,给我们的生产管道),有没有人用过任何聪明的技巧来处理这个问题?
graphics - Ogre material lod:我该如何设置?
我有一个 Ogre 材质,因为我对 GPU 过滤不满意,所以我想做一个手动 mipmapping,即我创建所有纹理,然后我设置一个基于 lod 的策略来加载正确的纹理。
问题是:我使用哪种策略都没有关系,lod_value 也不重要,我的材质不会改变纹理。我应该怎么办?我正在阅读手册,但它确实没有帮助。
这是我的代码:
android - glGenerateMipmap IMGSRV 错误
在我的应用程序中,我尝试使用纹理,但出现错误
在我的 Galaxy Nexus 上。我的 EVO 4G 没有出现这些错误。
这是相关的加载代码。
任何想法发生了什么以及如何解决它?
编辑:只有一张图片导致错误,它是 1024x2048 png。
c# - 在 xna 中生成纹理的 Mipmapping
我正在我的游戏中生成一些纹理,但我需要它们的 mipmap。为什么即使我在构造函数中将 mipMap 设置为 true 也没有生成 mipmap,如何生成 mipmap?
android - OpenGL ES 2.0 texture2D 偏差/lod
我正在使用 OpenGL ES 2.0 GLSL 功能来操作图像。我想要实现的是在从片段着色器中从纹理中获取样本时选择特定的细节级别(LOD)。显然texture2DLod()
,OpenGL ES 2.0 中的片段着色器不支持(但有一个扩展GL_EXT_shader_texture_lod
可以选择提供它。)
但是,默认texture2D()
函数提供了第三个可选参数偏差。据我了解,此参数应该是添加到当前 LOD 的偏移量。
在我的测试中,我正在绘制屏幕大小的四边形,并通过缩放样本坐标来放大纹理。我使用 GL_LINEAR_MIPMAP_LINEAR 作为缩小过滤器为纹理启用了 mipmapping。在 ARM Mali-400 GPU 上使用非零偏差参数进行采样时的结果如下图所示。
ISTM 认为一些像素使用缩小过滤器,而其他像素使用放大过滤器。
这是如何控制的?使用偏差时如何确定初始 LOD?可以从顶点着色器调整吗?
一个相关的问题是以下问题:
GLSL 采样器如何确定纹理的缩小以及 mipmap 级别?
更新:我注意到,如果我对纹理进行采样以使其覆盖屏幕,那么它似乎会进行正确的 mipmap 查找(即使它被放大了。)现在,如果我在样本坐标上添加一个小偏移量,那么我将开始看到上图中看到的条带(放大得更多。)如果我不使用偏差参数,我根本看不到任何条带。
textures - 在 D3D11 中创建纹理后更新纹理的 miplevel
在 Direct 3D 11 中,可以使用ID3D11DeviceContext::CreateTexture2D创建一个空纹理并使用ID3D11DeviceContext::UpdateSubresource方法更新纹理数据,指定所需的 mip 级别以在 D3D11_BOX 结构中进行更改。虽然这是可能的,但是否可以在 Direct 3D 中创建 2D 纹理后更改其 mip 级别的数量?
我知道这个问题引出了一个“你为什么要那样做?!” 响应,但由于一些移植/测试要求,我不得不这样做。