原文:Directx11教程(34) 纹理映射(4)

    本篇教程中,我们尝试在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]范围内的像素点会采用离它最近的纹理单元颜色。

    改为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

  

 

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

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

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

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

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

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

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

   其它的一些参数,平时用的不多,暂不讨论。

最新文章

  1. DOM 事件深入浅出(一)
  2. node基础09:第2个node web服务器
  3. eclipse中整合springMvc和velocity
  4. Linux编程下EAGAIN和EINTR宏的含义及处理
  5. Stay教你程序员泡妞攻略
  6. IE9中Media queries在iframe无效的解决方法
  7. LUN 和 LVM 知识
  8. shell date格式化输出
  9. [Ruby学习总结]Ruby中的类
  10. PHP修改记录
  11. IOS动态自适应标签实现
  12. Docker入门之--定制镜像
  13. 纯手写springIOC
  14. GLog 初始化说明
  15. BZOJ5177 : [Jsoi2013]贪心的导游
  16. asp.net通过distinct过滤集合(list)中重复项的办法
  17. [No0000175]maven常用命令集合(收藏大全)
  18. layui: 子iframe关闭/传值/刷新父页面
  19. Snmp学习总结(七)——SNMP4J介绍
  20. Imbalance Value of a Tree CodeForces - 915F

热门文章

  1. [转载] OpenCV2.4.3 CheatSheet学习(二)
  2. 使用Maven编译运行Storm入门代码(Storm starter)(转)
  3. qq邮箱问卷,测试不支持form表单
  4. js中的观察者模式与发布者/订阅者模式的区别?
  5. Django项目:CRM(客户关系管理系统)--20--12PerfectCRM实现King_admin分页上下页
  6. 原生ajax请求json数据
  7. 在vue中使用jq或者第三方插件
  8. 百度the big talk节目
  9. mybatis深入理解(六)-----MyBatis的二级缓存的设计原理
  10. ObservableCollection类