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

简介: 本篇教程中,我们尝试在myTutorialD3D_27中改变采样状态描述符的各种设置,看纹理贴图的方式有什么变化。 原始的代码是:     // 创建纹理采样描述符 samplerDesc.

    本篇教程中,我们尝试在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_ONCE,则会是下面的效果。对负的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中,我们的摄像机在正前方,使用正交投影,没有立体的效果,所以在后面的教程中,我们再尝试各向异性滤波的效果。

   其它的一些参数,平时用的不多,暂不讨论。
相关文章
|
C++ Windows
Visual Studio 2019 实现并行编译
使用 Visual Studio 2019 实现并行编译
1111 0
Visual Studio 2019 实现并行编译
|
1月前
|
人工智能 弹性计算 缓存
2026阿里云轻量应用服务器价格表:38元1年抢2核2G,9.9元1个月、199元1年抢2核4G
阿里云轻量应用服务器以简单易用、高性价比成为个人和普通企业用户的上云首选。2026年轻量应用服务器限时秒杀活动,如38元/年(2核2G)和9.9元/月(2核4G,预装OpenClaw)的抢购配置,覆盖个人开发、企业建站及AI应用部署场景。同时,提供日常配置套餐(2核4G、4核8G等)及长期特价云服务器ECS(99元/年经济型e实例、199元/年通用算力型u1实例),满足稳定需求。用户可根据业务规模和复杂度灵活选择。
|
SQL 数据管理 数据库
|
Linux
linux查看修改文件权限
linux查看修改文件权限
151 4
|
Shell
常用 adb 命令
常用 adb 命令
977 2
|
机器学习/深度学习 消息中间件 人工智能
人工智能平台PAI使用问题之EasyRec训练的步骤是怎样的
阿里云人工智能平台PAI是一个功能强大、易于使用的AI开发平台,旨在降低AI开发门槛,加速创新,助力企业和开发者高效构建、部署和管理人工智能应用。其中包含了一系列相互协同的产品与服务,共同构成一个完整的人工智能开发与应用生态系统。以下是对PAI产品使用合集的概述,涵盖数据处理、模型开发、训练加速、模型部署及管理等多个环节。
|
缓存 人工智能 定位技术
探究Qt Quick之Overlay类的魅力(二)
探究Qt Quick之Overlay类的魅力
381 0
|
编译器 C++
Visual Studio 2022 中如何设置背景图片,壁纸
Visual Studio 2022 中如何设置背景图片,壁纸