• 热门专题

Directx11教程(34) 纹理映射(4)

作者:迈克老狼2012  发布日期:2012-04-10 13:10:39
Tag标签:Directx11  纹理映射  
  •    本篇日志,我们尝试在myTutorialD3D_27中改变采样状态描述符的各种设置,看纹理贴图的方式有什么变化。

    原始的代码是:


    // 创建纹理采样描述符 
    samplerDesc.Filter = D3D11_FILTER_MIN_MAG_MIP_LINEAR; 
    samplerDesc.AddressU = D3D11_TEXTURE_ADDRESS_WRAP; 
    samplerDesc.AddressV = D3D11_TEXTURE_ADDRESS_WRAP; 
    samplerDesc.AddressW = D3D11_TEXTURE_ADDRESS_WRAP; 
    samplerDesc.MipLODBias = 0.0f; 
    samplerDesc.MaxAnisotropy = 1; 
    samplerDesc.ComparisonFunc = D3D11_COMPARISON_ALWAYS; 
    samplerDesc.BorderColor[0] = 0; 
    samplerDesc.BorderColor[1] = 0; 
    samplerDesc.BorderColor[2] = 0; 
    samplerDesc.BorderColor[3] = 0; 
    samplerDesc.MinLOD = 0; 
    samplerDesc.MaxLOD = D3D11_FLOAT32_MAX;
    
    // 创建纹理采样状态. 
    result = device->CreateSamplerState(&samplerDesc, &m_sampleState);
    
    

    1、首先我们尝试改变u,v的寻址模式(因为我们现在用的是二维纹理,W暂时忽略),

        改为D3D11_TEXURE_ADDRESS_CLAMP,能够看到在x,y方向,纹理坐标不在[0,1]范围内的像素点会采用离它最近的纹理单元颜色。

    image

        改为D3D11_TEXTURE_ADDRESS_BORDER,可以看到纹理坐标不在[0,1]的像素点都是黑色,这是因为我们设置了border的颜色为黑色,[0]…[3]表示border颜色的RGBA值,A的值好像没什么作用,随便改对结果没有影响。


    samplerDesc.BorderColor[0] = 0; 
    samplerDesc.BorderColor[1] = 0; 
    samplerDesc.BorderColor[2] = 0; 
    samplerDesc.BorderColor[3] = 0 

    image

     

    改为D3D11_TEXTURE_ADDRESS_MIRROR,则会有镜面的效果:

    image

    D3D11_TEXTURE_ADDRESS_MIRROR,则会是下面的效果。对负的u,v坐标取绝对值,所以左,上是镜像的效果,对超过[0,1]范围的正的坐标,使用clamp方式。

    image

    下面我们看看不同的滤波设置会对最终图像有什么影响:

    缺省我们设置的是samplerDesc.Filter = D3D11_FILTER_MIN_MAG_MIP_LINEAR,这也是应用程序中最常采用的方式。

        首先我们用D3D11_FILTER_MIN_MAG_MIP_POINT,这时没有用插值方式得到像素颜色,而是取纹理上最近似的纹理单元颜色做为像素颜色。在图像大小差不多的时候,明显可以看出效果要比线性方法差很多。

     

    image

     

    还可以分别对magnification,minification,mipmaps采用线性或者point方式,就不一一贴图了。

         这儿要提的是D3D11_FILTER_ANISOTROPIC,这种各向异性的滤波方式主要是对于三维空间的立体贴图有效果,防止贴图畸变,在myTutorialD3D_27中,我们的摄像机在正前方,使用正交投影,没有立体的效果,所以在后面的教程中,我们再尝试各向异性滤波的效果。

       其它的一些参数,平时用的不多,暂不讨论。
About IT165 - 广告服务 - 隐私声明 - 版权申明 - 免责条款 - 网站地图 - 网友投稿 - 联系方式
本站内容来自于互联网,仅供用于网络技术学习,学习中请遵循相关法律法规