Articles of mipmap

如何在SM 2.0中采样具有指定LOD的纹理?

这是我的问题,在SM 3.0中有HLSL intrasic函数tex2Dlod在指定的坐标和指定的详细程度上选取纹理2d上的颜色。 但经过长时间的网上search,我没有find等同于SM 2.0(ps_4_0_level_9_3)…

按需加载MipMap图层

我听说在OGL和DX9中, D3DPOOL_MANAGED mipmap图层被按需拉到GPU内存。 如果我从mipmap的第4层拉出,该图层和所有较小的图层都被拉入到GPU内存中,而较大的mipmap图层则不会。 我试图通过创建一个需要比GPU有空间的纹理更多的场景来testing这个场景,但是从来没有足够接近任何物体,从而需要更大的mipmap。 在OGL中,我并没有遇到性能悬崖,而且我可以用gDebugger告诉我,我没有填充GPU内存。 在D3DPOOL_DEFAULT我实际上得到了DX9错误,导致GPU内存空间不足。 在如此高的抽象层次上,我不能确定地说出发生了什么事情。 但是我希望这里有人能够证实或否认我所听到的部分mipmap传闻,因为这会使我的testing变得有意义。

Texture2D.SetData方法重载

在XNA框架中阅读了各种方法,并find了这一个。 我已经做了一些谷歌search,但我似乎无法find任何有关如何使用这种特殊的方法过载的信息。 参数3-5很容易理解,因为它们被用在另一个超载中,但是我不太确定前两个。 我相当肯定,第一个参数是我们正在设置数据的mipmap级别,但是第二个参数已经完全丢失了。 但是,我不确定我应该在这里通过什么。 我知道它可以是一个空对象,或一个有效的矩形对象,但我不确定是否正在使用它来指定这样的纹理贴图的大小: 或者它是否应该是Texture2D对象内的位置和大小,如下所示: 请有人可以点亮一下这个,也许提供一个或两个参数,所以我可以更好地理解? (我是其中一个可以花2个小时去理解一个理论并且完全没有进展的人,在几个例子(或者对于更复杂的东西是半打)之后的5分钟内得到它)

DirectX 11 GenerateMips仅适用于预乘alpha?

ID3D11DeviceContext中的GenerateMips方法允许在运行时生成 mipmap,适用于完全不透明的纹理。 但是,如果此方法与不包含预乘alpha的透明纹理一起使用,则所得到的mip级别在透明度边缘处倾向于具有黑色轮廓。 例如,通过WIC加载并使用GenerateMips进行处理的PNG纹理会生成边缘像素太暗的mipmap: 我的问题:是否有任何方法来指定此纹理使用非预乘alpha,以便DirectX可以生成更正确的mip级别?

glGenerateMipmap中的GL_INVALID_OPERATION(不完整立方体贴图)

我正在尝试学习OpenGL,并使用SOIL来加载图像。 我有以下一段代码: GLuint texID = 0; bool loadCubeMap(const char * baseFileName) { glActiveTexture(GL_TEXTURE0); glGenTextures(1, &texID); glBindTexture(GL_TEXTURE_CUBE_MAP, texID); const char * suffixes[] = { "posx", "negx", "posy", "negy", "posz", "negz" }; GLuint targets[] = { GL_TEXTURE_CUBE_MAP_POSITIVE_X, GL_TEXTURE_CUBE_MAP_NEGATIVE_X, GL_TEXTURE_CUBE_MAP_POSITIVE_Y, GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, GL_TEXTURE_CUBE_MAP_POSITIVE_Z, GL_TEXTURE_CUBE_MAP_NEGATIVE_Z }; for (int i = 0; i < 6; i++) { int width, height; std::string […]

各向异性过滤是否需要以前生成的mipmap?

我有一个支持各向异性过滤和土壤质地的GPU。 我想知道,如果我甚至需要创建一个mipmap,当我使用各向异性过滤,或者如果我可以把它留下来,只使用各向异性过滤。 我在一些tuts和post里查了一下,每个人都有mipmapping,但是他们没有提到为什么。 我不确定,但我认为我需要一个mipmap,因为我不认为各向异性过滤从1024×1024到1024×512或256×256的比例。 我对吗?

Unity的QualitySettings.masterTextureLimit如何工作?

我试图findmasterTextureLimit如何工作的底部,但到目前为止,我的结果并不一致。 我创建了一个巨大的精灵(8192×8192),我想在运行时调整它的大小,以节省性能。 这个想法是从大型精灵开始,然后根据显示器的分辨率resize。 以下是在不同设置下发生的情况: 纹理导入大小8192,masterTextureLimit 0,mipmapclosures:〜2ms 纹理导入大小8192,masterTextureLimit 0,mipmapps:〜1.5ms 纹理导入大小8192,masterTextureLimit 1,mipmapps:〜1.5ms 纹理导入大小4096,masterTextureLimit 0,mipmapclosures:〜0.9ms 纹理导入大小4096,masterTextureLimit 0,mipmapps:〜0.9ms 纹理导入大小4096,masterTextureLimit 1,mipmapps:〜0.83ms 看看这些结果,我有几个问题: 如果masterTextureLimit应该将纹理分辨率减半,那么为什么在将纹理大小设置为4096时不会影响性能? 为什么在8192纹理尺寸的情况下改进性能而不是在4096? 我的相机是正字法的,离精灵只有一个单位。

GL_GENERATE_MIPMAP与GL_MAX_TEXTURE_SIZE

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

glGenerateMipmap混淆

我试图用OpenGL抓住mipmaps。 我相信我理解这个概念,但是当试图让OpenGL生成它们时,我想知道它是如何决定生成多less个mipmap的? 以下是我正在运行的初始化2d纹理: glGenTextures(1, &mTexture); glBindTexture(GL_TEXTURE_2D, mTexture); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA , textureWidth, textureHeight, 0, GL_RGBA, GL_UNSIGNED_BYTE, &textureData[0]); glGenerateMipmap(GL_TEXTURE_2D); glBindTexture(GL_TEXTURE_2D, 0); 我没有指定要生成多less个mipmap级别。 这种情况下生成多less个mipmap? 你在哪里指定这个号码? 我也看到了另一种来自http://www.opengl.org/wiki/Common_Mistakes的技术,你可以用glTexStorage2D来指定所有的mipmaps级别 – 但是你可以指定多less级别,以及质量的合理数量是多less?

我可以在D3D9Ex上使用SetLOD吗?

我需要限制加载到设备的mipmap级别的某些纹理,但我使用基于D3D9Ex的引擎,所以我只能使用D3DPOOL_DEFAULT , 而不是 D3DPOOL_MANAGED 。 微软的文档说我可以使用SetLOD 为一个受管理的纹理。 这是否意味着我不能在D3D9Ex中使用SetLOD?