龙书笔记(6)

这次说说纹理...

借助纹理映射,可以将 图像数据 映射到 三角形单元中。

IDirect3D中用 IDirect3DTexture9 表示纹理接口(是一个类似表面的像素矩阵,与表面不同的是他可被映射到三角形单元中)

1.纹理坐标
纹理坐标系(纹理空间):由水平方向u轴 和 垂直方向v轴 组成,利用 坐标对(u,v)标识的纹理元素称为纹理元
对于每个3D三角形单元,都可以在纹理中定义一个相对应的三角形区域,然后将该三角形区域映射到3D三角形中
注意(1):u轴正方向是水平向右,v轴的正方向是 垂直向下!
注意(2):为了处理不同尺度纹理,Direct3D将纹理坐标系规范化了,也就是说使之限定在[0,1]之间

2.创建并启用纹理
纹理数据通常是从图像文件读入的,然后再加载到IDirect3DTexture9中,创建使用的函数是:D3DXCreateTextureFromFile(),使用的函数是:SetTexture()。
			IDirect3DTexture9 * stonewall;
			D3DXCreateTextureFromFile(device, "stonewall.bmp", &stonewall);		//读入纹理文件
			Device->SetTexture(0, stonewall);					//设置当前纹理,第一个参数(多重纹理)取值范围是0~7,他是指纹理的层数,所以最多是8层


若想禁用某层的纹理,可将SetTexture的第二个参数设为0,对于那些不用纹理的模型来说这很实用。
			Device->SetTexture(0,0);


若各三角形单元使用的纹理均不同
			Device->SetTexture(0,tex0);
			//rendering...
			
			Device->SetTexture(0,tex1);
			//rendering...


3.纹理过滤器: 
用来解决纹理三角形与屏幕三角形大小不一致的问题(不管是放大纹理三角形还是缩小纹理三角形,都会产生畸变)
Direct3D提供了3种纹理过滤器,每种过滤器都有一个 质量水平 (当然,质量越高,运算的速度就越慢)
纹理过滤方式使用的方法是 IDirect3DDevice9->SetSamplerState()

(1)最近点采样:默认,速度快,但效果最差。
			Device->SetSamplerState(0, D3DSAMP_MAGFILTER, D3DTEXF_POINT);
			Device->SetSamplerState(0, D3DSAMP_MINFILTER, D3DTEXF_POINT);


(2)线性纹理过滤:速度较快,效果也不错,建议 至少使用线性纹理过滤,放大和缩小的实例:
			Device->SetSamplerState(0, D3DSAMP_MAGFILTER, D3DTEXF_LINER);
			Device->SetSamplerState(0, D3DSAMP_MINFILTER, D3DTEXF_LINER);

(3)各向异性纹理过滤:速度最快,但也最慢
			Device->SetSamplerState(0, D3DSAMP_MAGFILTER, D3DTEXF_ANISOTROPIC);
			Device->SetSamplerState(0, D3DSAMP_MINFILTER, D3DTEXF_ANISOTROPIC);
			//使用 各向异性纹理过滤时,还必须对 D3DSAMP_MAXANISOTROPIC 进行设定,此值越大,图像效果越好
			Device->SetSamplerState(0, D3DSAMP_MAXANISOTROPIC, 4);



4.多级渐近纹理:
为纹理创建一个 多级渐进纹理链
多级渐近纹理过滤器:
		Device->SetSamplerState(0, D3DSAMP_MIPFILTER, Filter);

Filter 取值为 
D3DTEXF_NONE:禁用多级纹理
D3DTEXF_POINT:选择与屏幕三角形最接近的那一级纹理

D3DTEXF_LINER:选择与屏幕三角形尺寸最接近的2个纹理级,线性组合他们的结果就是最终的结果

多级渐近纹理的使用:
在设定好D3DSAMP_MIPFILTER后,D3DXCreateTextureFromFile会自动创建好纹理链,Direct3D会自动去找纹理链中最匹配的那一级纹理。

5.寻址模式
由于纹理坐标必须在[0,1]之间,但有时坐标往往会超过这个范围,所以Direc3D定义了4种模式来解决这个问题
也就是针对所给的纹理坐标超过0~1范围之间的场合。
重复寻址模式、边界寻址模式、钳位寻址模式、镜像寻址模式




学习到现在遇到的小问题:

1. 索引缓存的设置,顺时针是正面,也就是说若逆时针设置时,将显示空白,因为这被解释为背面
2. 光照和材质的使用很简单,都是创建好对象(D3DLIGHT9,D3DMATERIAL9),然后设置具体参数并调好使用状态(SetRenderState),最后在Device中添加(SetLight和SetMaterial)

3. 纹理的使用也很简单,创建纹理接口完毕后,载入纹理图片,设置纹理过滤器和多级渐近纹理,最后也是在Device中添加此接口(SetTexture)。


1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看rEADME.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看rEADME.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值