博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
DirectX11 纹理采样
阅读量:4089 次
发布时间:2019-05-25

本文共 1418 字,大约阅读时间需要 4 分钟。

纹理采样

1. HLSL纹理采样表示

我们知道,Texture2D对象用于在effect文件中表示纹理。不过,还有一种与纹理相关的SamplerState(采样器)对象。它用于描述如何使用过滤器访问纹理资源。下面是它的一些例子:

// 在倍增、缩减、多级渐进纹理上使用线性过滤。SamplerState mySampler0{    Filter = MIN_MAG_MIP_LINEAR;};// 在缩减上使用线性过滤,倍增和多级渐进纹理上使用点过滤。SamplerState mySampler1{    Filter = MIN_LINEAR_MAG_MIP_POINT;};// 在缩减上使用点过滤,倍增上使用线性过滤,多级渐进纹理上使用点过滤。SamplerState mySampler2{    Filter = MIN_POINT_MAG_LINEAR_MIP_POINT;};// 在倍增、缩减、多级渐进纹理上使用各向异性过滤。SamplerState mySampler3{    Filter = ANISOTROPIC;    MaxAnisotropy = 4;};

注意,对于各向异性过滤,我们必须指定各向异性的最大值,这个值介于1至16之间。大数值需要耗费更多的资源,但效果更好。你可以从这些例子中猜到一些其他的标志值,或者你可以在SDK文档中查找D3D11_FILTER枚举类型。我们很快就会看到与采样器相关的其他属性,但是对于我们的第一个演示程序来说现在的这些内容已经足够了。

现在,传入像素着色器的每个像素都有一对纹理坐标,我们使用如下语法完成实际的纹理采样工作:

Texture2D gDiffuseMap;struct VertexOut{    float4 posH : SV_POSITION;    float3 posW : POSITION;    float3 normalW : NORMAL;    float2 Tex : TEXCOORD;};SamplerState samAnisotropic{    Filter = ANISOTROPIC;    MaxAnisotropy = 4;};float4 PS(VertexOut pin, uniform  int gLightCount) : SV_Target{    // 从纹理中提取颜色    float4 texColor = gDiffuseMap.Sample(samAnisotropic, pin.Tex);    ...

可以看到,我们使用Texture2D::Sample方法对一个纹理进行采样。通过第一个参数传递SamplerState对象,通过第二个参数传递像素的纹理坐标(u,v)。该方法使用由SamplerState对象指定的过滤方式从纹理贴图中返回位于点(u,v)处的插值颜色。

2. DirectX11纹理采样表示

注意:HLSL类型SamplerState对应ID3D11SamplerState接口。采样状态也可以在应用程序中由ID3DX11EffectSamplerVariable::SetSampler方法进行设置。见D3D11_SAMPLER_DESC和ID3D11Device::CreateSamplerState。和渲染状态一样,必须在初始化阶段就创建采样状态。

转载地址:http://dpyii.baihongyu.com/

你可能感兴趣的文章
MouseEvent的e.stageX是Number型,可见as3作者的考虑
查看>>
移植Vim配色方案到Eclipse
查看>>
从超链接调用ActionScript
查看>>
谈谈加密和混淆吧[转]
查看>>
TCP的几个状态对于我们分析所起的作用SYN, FIN, ACK, PSH,
查看>>
网络游戏客户端的日志输出
查看>>
关于按钮的mouseOver和rollOver
查看>>
Netty框架
查看>>
Socket经验记录
查看>>
对RTMP视频流进行BitmapData.draw()出错的解决办法
查看>>
FMS 客户端带宽计算、带宽限制
查看>>
在线视频聊天(客服)系统开发那点事儿
查看>>
SecurityError Error 2148 SWF 不能访问本地资源
查看>>
Qt 静态编译后的exe太大, 可以这样压缩.
查看>>
3D游戏常用技巧Normal Mapping (法线贴图)原理解析——基础篇
查看>>
乘法逆元
查看>>
STL源码分析----神奇的 list 的 sort 算法实现
查看>>
Linux中用st_mode判断文件类型
查看>>
Ubuntu修改host遇到unable to resolve host
查看>>
路由选择算法
查看>>