我们将用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分开,我不确定哪个是等效的。
答案 0 :(得分:1)
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>
MinFilter = POINT
MagFilter = POINT
MipFilter = NONE
MinFilter = GL_NEAREST
MagFilter = GL_NEAREST