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中,我们的摄像机在正前方,使用正交投影,没有立体的效果,所以在后面的教程中,我们再尝试各向异性滤波的效果。
最新文章
- DOM 事件深入浅出(一)
- node基础09:第2个node web服务器
- eclipse中整合springMvc和velocity
- Linux编程下EAGAIN和EINTR宏的含义及处理
- Stay教你程序员泡妞攻略
- IE9中Media queries在iframe无效的解决方法
- LUN 和 LVM 知识
- shell date格式化输出
- [Ruby学习总结]Ruby中的类
- PHP修改记录
- IOS动态自适应标签实现
- Docker入门之--定制镜像
- 纯手写springIOC
- GLog 初始化说明
- BZOJ5177 : [Jsoi2013]贪心的导游
- asp.net通过distinct过滤集合(list)中重复项的办法
- [No0000175]maven常用命令集合(收藏大全)
- layui: 子iframe关闭/传值/刷新父页面
- Snmp学习总结(七)——SNMP4J介绍
- Imbalance Value of a Tree CodeForces - 915F
热门文章
- [转载] OpenCV2.4.3 CheatSheet学习(二)
- 使用Maven编译运行Storm入门代码(Storm starter)(转)
- qq邮箱问卷,测试不支持form表单
- js中的观察者模式与发布者/订阅者模式的区别?
- Django项目:CRM(客户关系管理系统)--20--12PerfectCRM实现King_admin分页上下页
- 原生ajax请求json数据
- 在vue中使用jq或者第三方插件
- 百度the big talk节目
- mybatis深入理解(六)-----MyBatis的二级缓存的设计原理
- ObservableCollection类