DX9入门(四)

翁云兵老师《3D游戏程序设计入门》笔记

纹理

1、纹理是什么,为啥要加入纹理
GAMES101中的定义是,对不同的顶点赋予不同的属性。
2、创建并赋予材质
IDirect3Dtexture9* stonewall;
D3DXCreateTextureFromFile(device, “stonewall”, &stonewall);
device->SetTexture(0, stonewall); //stage设置为0,表示一个纹理。stage取值从0到7。可以贴8张纹理

3、不管纹理贴图分辨率有多少,纹理系统的坐标始终是(0,1)。坐标系统从左上角开始。向右为u的正方向,向下为v的正方向

4、但是当纹理坐标超过1的时候,需要进行重复贴图。
DX9里贴图的重复有四种寻址模式:环绕纹理寻址模式、边框颜色纹理寻址模式、截取纹理寻址模式、镜像纹理寻址模式。
4、三角形和纹理的映射会因为三角形的大小问题而产生很严重的走样,比如透视投影后,很远处的一块三角形会变得很小,但是映射到纹理上却是原先的那个分辨率的纹理三角形。这就发生了走样。

5、DX9中使用三种过滤器来帮助纹理三角形放大缩小。不是说一种过滤器就能实现放大和缩小了,而是在需要放大时使用放大过滤器,在缩小时使用缩小过滤器。另外,还有一种解决办法一般是mipmap。

  1. Nearest point samping:最近点
    Device->SetSamplerState(0, D3DSAMP_MAGFILTER, D3DTEXF_POINT); //mapfilter放大过滤器
    Device->SetSamplerState(0, D3DSAMP_MINFILTER,
    D3DTEXF_POINT); //minfilter缩小过滤器
  2. Linear filter:线性
    Device->SetSamplerState(0, D3DSAMP_MAGFILTER,
    D3DTEXF_LINEAR);
    Device->SetSamplerState(0, D3DSAMP_MINFILTER,
    D3DTEXF_LINEAR);
  3. Anisotropic filter:各项异性
    Device->SetSamplerState(0, D3DSAMP_MAGFILTER,
    ANISOTROPIC);
    Device->SetSAmplerState(0, D3DSAMP_MINFILTER,
    ANISOTROPIC);

6、使用Mipmap进行过滤
如果显卡支持,只要通过D3DXCreateTextureFromFile函数,一个mipmap链将被自动创建。
Device->SetSamplerState(0, D3DSAMP_MIPFILTER, Filter);

  1. Filter选D3DTEXF_NONE:不使用mipmap
    D3DTEXF_POINT:选择和屏幕三角形大小最接近的mipmap等级
    D3DTEXF_LINEAR:选择和屏幕三角形大小最接近的两个mipmap等级,线性联合计算它们的等级得到最终的纹理

7、场景设置纹理如下:

  1. 在顶点格式中加入纹理坐标
  2. 使用D3DXCreateTextureFromFile函数读取纹理到IDirect3DTexture9接口中
  3. 设置缩小放大、mipmap过滤器。
  4. 使用SetTexture设置纹理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值