【问题标题】:Texture filtering DirectX to WebGL纹理过滤 DirectX 到 WebGL
【发布时间】:2015-08-29 10:37:15
【问题描述】:

我们正在将用 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 分开,我不确定哪个是等效的。

【问题讨论】:

    标签: opengl-es directx textures webgl


    【解决方案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 过滤器作为一种事后 hack 的地方(很多 GL 的设计相当于快速 hack 以在不引入新命令的情况下使某些东西适合现有 API或州)。

    任何带有..._MIPMAP_... 的过滤器常量仅可用作缩小过滤器并以这种方式读取:

    GL_<MipFilter>_MIPMAP_<MinFilter>
    

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

    MinFilter = POINT
    MagFilter = POINT
    MipFilter = NONE
    

    这是它的 GL 等效设置:

    MinFilter = GL_NEAREST
    MagFilter = GL_NEAREST
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-05
      • 1970-01-01
      • 2016-08-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多