Direct3D 使用质地
关于使用质地
1 创建纹理
2 纹理寻址模式
3 纹理过滤
1 创建纹理
<1> D3DXCreateTexture功能
创建一个空的纹理。
HRESULT D3DXCreateTexture(
__in LPDIRECT3DDEVICE9 pDevice,
__in UINT Width,
__in UINT Height,
__in UINT MipLevels,
__in DWORD Usage,
__in D3DFORMAT Format,
__in D3DPOOL Pool,
__out LPDIRECT3DTEXTURE9 *ppTexture
);
<2> D3DXCreateTextureFromFile函数
从文件创建一个纹理。支持各种格式bmp, .dds, .dib, .hdr, .jpg, .pfm, .png, .ppm, .tga
HRESULT D3DXCreateTextureFromFile(
__in LPDIRECT3DDEVICE9 pDevice,
__in LPCTSTR pSrcFile,
__out LPDIRECT3DTEXTURE9 *ppTexture
);
<3> D3DXCreateTextureFromFileEx函数
这个是比综合了D3DXCreateTexture和D3DXCreateTextureFromFile函数功能的强大的纹理创建函数。
HRESULT D3DXCreateTextureFromFileEx(
__in LPDIRECT3DDEVICE9 pDevice,
__in LPCTSTR pSrcFile,
__in UINT Width,
__in UINT Height,
__in UINT MipLevels,
__in DWORD Usage,
__in D3DFORMAT Format,
__in D3DPOOL Pool,
__in DWORD Filter,
__in DWORD MipFilter,
__in D3DCOLOR ColorKey,
__inout D3DXIMAGE_INFO *pSrcInfo,
__out PALETTEENTRY *pPalette,
__out LPDIRECT3DTEXTURE9 *ppTexture
);
纹理创建完成后。要启动纹理就要使用函数SetTexture。
HRESULT SetTexture(
[in] DWORD Sampler,
[in] IDirect3DBaseTexture9 *pTexture
);
參数Sampler :指定了第几个纹理层,sampler(採样器)指定了採样的状态值,比如滤波方式,寻址方式。
參数pTexture:指定了欲载入的纹理指针。
2 纹理的寻址方式
纹理的寻址方式,常见的有反复寻址模式。镜像寻址模式,夹取寻址模式,边框寻址模式。一次镜像寻址。设置寻址方式的函数为:
HRESULT SetSamplerState(
[in] DWORD Sampler,
[in] D3DSAMPLERSTATETYPE Type,
[in] DWORD Value
);
Sampler:採样器的编号
D3DSAMPLERSTATETYPE:採样器状态类型
Value:採样器指定状态的值
从枚举类型D3DSAMPLERSTATETYPE中能够找到关于寻址模式设置的三个枚举变量是:
D3DSAMP_ADDRESSU = 1,
D3DSAMP_ADDRESSV = 2,
D3DSAMP_ADDRESSW = 3,
相应的Value的值要从枚举变量中取值D3DTEXTUREADDRESS
typedef enum D3DTEXTUREADDRESS {
D3DTADDRESS_WRAP = 1,
D3DTADDRESS_MIRROR = 2,
D3DTADDRESS_CLAMP = 3,
D3DTADDRESS_BORDER = 4,
D3DTADDRESS_MIRRORONCE = 5,
D3DTADDRESS_FORCE_DWORD = 0x7fffffff
} D3DTEXTUREADDRESS, *LPD3DTEXTUREADDRESS;
<1> D3DTADDRESS_WRAP
反复寻址方式
<2> D3DTADDRESS_MIRROR
镜像寻址方式
<3> D3DTADDRESS_CLAMP
夹取寻址方式
<4> D3DTADDRESS_BORDER
边框颜色寻址方式
<5> D3DTADDRESS_MIRRORONCE
这是镜像寻址和夹取寻址的组合,取纹理坐标的绝对值。从0处镜像寻址,从最大处夹取寻址。
就是以0为边界。把负的坐标和正的坐标做镜像。所以说是[-1,1]内是做镜像,这个范围之外就是夹取了。
另外假设纹理坐标中假设没有负坐标值的话。那么效果就和夹取寻址模式一模一样了。
<6> Texture Wrapping
系统绘制多边形的时候,会在顶点的纹理坐标值之间进行插值依次来决定多边形中的每个像素的纹理坐标值。在通常情况下,系统会把纹理当做一个2D平面。插值的时候是通过顶点之间的最短路线进行插值。那么在2D平面下。它将会是一个线段。
纹理包装就是指纹理在进行插值的时候,不再是一个2D平面,比如在U方向进行包装,就是把纹理围成一个圆柱面,这个时候两个顶点之间最短的距离是圆柱面上距离最短的距离而不再是平面上距离最短的距离。例如以下图所看到的:
A和B之间的最小距离就不是像平面上两点之间的线段。
当同一时候两个方向UV都採取包裹的时候,能够想象为面包圈的形式
3 纹理的过滤方式
纹理的过滤也是通过函数SetSamplerState来设置的。如今继续看看D3DSAMPLERSTATETYPE的枚举类型的中全部的类型。例如以下所看到的:
typedef enum D3DSAMPLERSTATETYPE {
D3DSAMP_ADDRESSU = 1,
D3DSAMP_ADDRESSV = 2,
D3DSAMP_ADDRESSW = 3,
D3DSAMP_BORDERCOLOR = 4, //设置纹理边界颜色
D3DSAMP_MAGFILTER = 5, //放大滤波
D3DSAMP_MINFILTER = 6, //缩小滤波
D3DSAMP_MIPFILTER = 7, //MIP滤波
D3DSAMP_MIPMAPLODBIAS = 8, //多级纹理映射的偏移值
D3DSAMP_MAXMIPLEVEL = 9, //最大纹理过滤级数
D3DSAMP_MAXANISOTROPY = 10,//设置各项异性最大值,越大越好
D3DSAMP_SRGBTEXTURE = 11,//
D3DSAMP_ELEMENTINDEX = 12,//
D3DSAMP_DMAPOFFSET = 13,//
D3DSAMP_FORCE_DWORD = 0x7fffffff
} D3DSAMPLERSTATETYPE, *LPD3DSAMPLERSTATETYPE;
详细滤波的值从枚举类型D3DTEXTUREFILTERTYPE
typedef enum D3DTEXTUREFILTERTYPE {
D3DTEXF_NONE = 0,
D3DTEXF_POINT = 1,
D3DTEXF_LINEAR = 2,
D3DTEXF_ANISOTROPIC = 3,
D3DTEXF_PYRAMIDALQUAD = 6,
D3DTEXF_GAUSSIANQUAD = 7,
D3DTEXF_CONVOLUTIONMONO = 8,
D3DTEXF_FORCE_DWORD = 0x7fffffff
} D3DTEXTUREFILTERTYPE, *LPD3DTEXTUREFILTERTYPE;
<1> D3DTEXF_POINT
近期点採样
Device->SetSamplerState(0,D3DSAMP_MAGFILTER,D3DTEXF_POINT)
Device->SetSamplerState(0,D3DSAMP_MINFILTER,D3DTEXF_POINT);
<2> D3DTEXF_LINEAR
线性纹理过滤
Device->SetSamplerState(0,D3DSAMP_MAGFILTER,D3DTEXF_LINEAR)
Device->SetSamplerState(0,D3DSAMP_MINFILTER,D3DTEXF_LINEAR);
<3> D3DTEXF_ANISOTROPIC
各项异性纹理过滤。使用之前必须设置D3DSAMP_MAXANISOTROPIC,该值决定各项异性过滤的水平,值越大效果越好
Device->SetSamplerState(0,D3DSAMP_MAXANISOTROPIC,4);
Device->SetSamplerState(0,D3DSAMP_MAGFILTER,D3DTEXF_ANISOTROPIC)
Device->SetSamplerState(0,D3DSAMP_MINFILTER,D3DTEXF_ANISOTROPIC);
D3DTEXF_NONE
当使用D3DSAMP_MIPFILTER的时候,禁止多级渐进纹理过滤
<4>多级纹理渐进
这个不能必须配合其它纹理过滤方式使用,利用SetSamplerState函数,第二个參数是D3DSAMP_MIPFILTER,第三个參数选取
D3DTEXF_NONE
D3DTEXF_POINT
D3DTEXF_LINEAR
当中D3DTEXF_NONE表示禁用多级纹理过滤。
版权声明:本文博客原创文章,博客,未经同意,不得转载。
Direct3D 使用质地的更多相关文章
- DirectX游戏编程(一):创建一个Direct3D程序
一.环境 Visual Studio 2012,DirectX SDK (June 2010) 二.准备 1.环境变量(如没有配置请添加) 变量名:DXSDK_DIR 变量值:D:\Software\ ...
- Direct3D设备管理器(Direct3D device manager)
这几天在做dxva2硬件加速,找不到什么资料,翻译了一下微软的两篇相关文档.并准备记录一下用ffmpeg实现dxva2,将在第三篇写到.这是第一篇,英文原址:https://msdn.microsof ...
- [ZZ] A Proposal For Compiling Direct3D HLSL With LLVM (Written by Michael Larabel )
http://www.phoronix.com/scan.php?page=news_item&px=OTI2NA Note: Something very instersting to w ...
- 【译】Import Changes from Direct3D 11 to Direct3D 12
译者:林公子 出处:木木的二进制人生 转载请注明作者和出处,谢谢! 这是微软公布的Direct3D 12文档的其中一篇,此翻译留作学习记录备忘,水平有限,错漏难免,还望海涵. 原文链接是https:/ ...
- Direct3D 10学习笔记(四)——Windows编程
本篇将简单整理基本的Windows应用程序的实现,并作为创建Direct3D 10应用程序的铺垫.具体内容参照< Introduction to 3D Game Programming with ...
- Direct3D 10学习笔记(三)——文本输出
本篇将简单整理Direct3D 10的文本输出的实现,具体内容参照< Introduction to 3D Game Programming with DirectX 10>(中文版有汤毅 ...
- Direct3D 10学习笔记(二)——计时器
本篇将简单整理Direct3D 10的计时器实现,具体内容参照< Introduction to 3D Game Programming with DirectX 10>(中文版有汤毅翻译 ...
- Direct3D 10学习笔记(一)——初始化
本篇将简单整理Direct3D 10的初始化,具体内容参照< Introduction to 3D Game Programming with DirectX 10>(中文版有汤毅翻译的电 ...
- [转]Direct3D 11 Tessellation Tutorial
The new hardware tessellation feature available on Direct3D 11 video cards has great potential, but ...
随机推荐
- bloom filter与dawgdic(一种trie树)
我有一个做了一款移动浏览器的朋友. 他有这样一个需求:当用户输入一个站点的url时候.移动浏览器须要识别这个网址是否是一个恶意网址.另外.他有一个恶意网址库. 或许这种解决方法有多种. 当中一种就是把 ...
- C++设计模式--观察员
概要 在软件构建过程中.我们须要为某些对象建立一种"通知依赖关系" --一个对象(目标对象)的状态发生改变,全部的依赖对象(观察者对象)都将得到通知.假设这种依赖关系过于紧密,将使 ...
- Codeforces 549G. Happy Line 馋
非常有趣的贪婪: Let's reformulate the condition in terms of a certain height the towers, which will be on t ...
- C++——STL中三种顺序容器的简要差别
C++ STL 提供了3个顺序容器 :vector, deque, list Vector动态数组.支持高速訪问:list双向链表,支持高速插入和删除. vector 中的元素是顺序存放的.所以随机訪 ...
- JavaWeb学习总结(一)JavaWeb开发入门
静态网页和动态网页 静态网页:在服务器上没有经过服务器解释执行的网页. 动态网页:在服务器上经过服务器解释执行的网页. 无论是静态网页还是动态网页,客户端看到的网页都是由HTML所构成的,所以Java ...
- windows phone 7,sliverlight 下载网页的解析,关于wp7 gb2312编码
原文:windows phone 7,sliverlight 下载网页的解析,关于wp7 gb2312编码 关于silverlight和wp7(windows phone 7)是默认不支持gb2312 ...
- 神经网络BP算法C和python代码
上面只显示代码. 详BP原理和神经网络的相关知识,请参阅:神经网络和反向传播算法推导 首先是前向传播的计算: 输入: 首先为正整数 n.m.p.t,分别代表特征个数.训练样本个数.隐藏层神经元个数.输 ...
- spoj Balanced Numbers(数位dp)
一个数字是Balanced Numbers,当且仅当组成这个数字的数,奇数出现偶数次,偶数出现奇数次 一下子就相到了三进制状压,数组开小了,一直wa,都不报re, 使用记忆化搜索,dp[i][s] 表 ...
- Android学习之 AChartEngine 图表绘制
Android 开源图表绘制工具AChartEngine地址:http://code.google.com/p/achartengine/ AChartEngine Android实现图表绘制和展示( ...
- Android 关于资源适配
一. 关于图片资源 图片宽高 不要固定大小,在小屏幕和大屏幕,不同分频率上 ,採用不同的图片,这个要美工切图的. 不同的分辨率,界面的长宽比不一致,须要不同规格的图片 在drawable-hdpi,d ...