纹理过滤DirectX到WebGL

时间:2015-08-23 10:52:02

标签: opengl-es directx textures webgl

我们将用DirectX 9编写的旧代码移植到WebGL。我们偶然发现了一个错误,这似乎与纹理过滤有关。

对于某些纹理,原始代码使用以下内容:

MinFilter = LINEAR;
MagFilter = LINEAR;
MipFilter = POINT;    
Texture   = <envCube1>;
AddressU  = WRAP;
AddressV  = WRAP;

这对其他人来说:

MinFilter = POINT;
MagFilter = POINT;
MipFilter = POINT;    
Texture   = <envCube4>;
AddressU  = WRAP;
AddressV  = WRAP;

我知道MagFilter是POINT = NEAREST和LINEAR = LINEAR,但由于WebGL(和一般的OpenGL)没有将MipFilter与MinFilter分开,我不确定哪个是等效的。

1 个答案:

答案 0 :(得分:1)

鉴于DX9的两个采样器状态,OpenGL等效设置为:

Min Filter: GL_NEAREST_MIPMAP_LINEAR
Mag Filter: GL_LINEAR

Min Filter: GL_NEAREST_MIPMAP_NEAREST
Mag Filter: GL_NEAREST

更一般地说,您需要遵守一条经验法则。

OpenGL中的min过滤器是他们决定将mip过滤器作为一种事后黑客攻击的地方(相当一部分GL的设计相当于快速破解以使某些东西适合现有API没有引入新的命令或状态)。

其中包含..._MIPMAP_...的任何过滤器常量仅对用作缩小过滤器有效并以此方式读取:

GL_<MipFilter>_MIPMAP_<MinFilter>

您的问题没有问这个,但请考虑以下D3D采样器状态:

MinFilter = POINT
MagFilter = POINT
MipFilter = NONE

这是GL等效设置:

MinFilter = GL_NEAREST
MagFilter = GL_NEAREST