龙书笔记(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)。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
信息数据从传统到当代,是一直在变革当中,突如其来的互联网让传统的信息管理看到了革命性的曙光,因为传统信息管理从时效性,还是安全性,还是可操作性等各个方面来讲,遇到了互联网时代才发现能补上自古以来的短板,有效的提升管理的效率和业务水平。传统的管理模式,时间越久管理的内容越多,也需要更多的人来对数据进行整理,并且数据的汇总查询方面效率也是极其的低下,并且数据安全方面永远不会保证安全性能。结合数据内容管理的种种缺点,在互联网时代都可以得到有效的补充。结合先进的互联网技术,开发符合需求的软件,让数据内容管理不管是从录入的及时性,查看的及时性还是汇总分析的及时性,都能让正确率达到最高,管理更加的科学和便捷。本次开发的高校科研信息管理系统实现了操作日志管理、字典管理、反馈管理、公告管理、科研成果管理、科研项目管理、通知管理、学术活动管理、学院部门管理、科研人员管理、管理员管理等功能。系统用到了关系型数据库中王者MySql作为系统的数据库,有效的对数据进行安全的存储,有效的备份,对数据可靠性方面得到了保证。并且程序也具备程序需求的所有功能,使得操作性还是安全性都大大提高,让高校科研信息管理系统更能从理念走到现实,确确实实的让人们提升信息处理效率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值