directx初第九卷

纹理

纹理映射


声明变量

IDirect3DTexture9* texture = 0;

创建纹理贴图

//读取纹理图片(设备指针,纹理图片地址,把结果存到贴图指针)
D3DXCreateTextureFromFile(g_pd3dDevice, "UnityPlayerIcon.png", &texture);
//读取纹理图片(设备指针,纹理图片地址,使用贴图宽度,使用贴图高度,渐进纹理级数,标志,纹理格式,
//保存纹理方式,纹理过滤方式,生成纹理序列的过滤方式,替换alpha值的颜色值,通常为null,调色板地址,把结果存到贴图指针)
D3DXCreateTextureFromFileEx(g_pd3dDevice, "UnityPlayerIcon.png", 0, 0, 6, 0, D3DFMT_X8R8G8B8,
D3DPOOL_MANAGED, D3DX_DEFAULT, D3DX_DEFAULT, 0xFF000000, 0, 0, &texture);

设置纹理贴图

//设置贴图(应用到纹理第一层,贴图指针)
g_pd3dDevice->SetTexture(0, texture);

纹理过滤

最近采样点纹理过滤

g_pd3dDevice->SetSamplerState(0, D3DSAMP_MAGFILTER, D3DTEXF_POINT);
g_pd3dDevice->SetSamplerState(0, D3DSAMP_MINFILTER, D3DTEXF_POINT);

线性纹理过滤

g_pd3dDevice->SetSamplerState(0, D3DSAMP_MAGFILTER, D3DTEXF_LINEAR);
g_pd3dDevice->SetSamplerState(0, D3DSAMP_MINFILTER, D3DTEXF_LINEAR);

各向异性纹理过滤

g_pd3dDevice->SetSamplerState(0, D3DSAMP_MAXANISOTROPY, 3);
g_pd3dDevice->SetSamplerState(0, D3DSAMP_MAGFILTER, D3DTEXF_ANISOTROPIC);
g_pd3dDevice->SetSamplerState(0, D3DSAMP_MINFILTER, D3DTEXF_ANISOTROPIC);

多级渐进纹理过滤

g_pd3dDevice->SetSamplerState(0, D3DSAMP_MIPFILTER, D3DTEXF_LINEAR);
g_pd3dDevice->SetSamplerState(0, D3DSAMP_MAXMIPLEVEL, 2);

纹理寻址

重复纹理寻址

g_pd3dDevice->SetSamplerState(0, D3DSAMP_ADDRESSU, D3DTADDRESS_WRAP);
g_pd3dDevice->SetSamplerState(0, D3DSAMP_ADDRESSV, D3DTADDRESS_WRAP);

镜像纹理寻址

g_pd3dDevice->SetSamplerState(0, D3DSAMP_ADDRESSU, D3DTADDRESS_MIRROR);
g_pd3dDevice->SetSamplerState(0, D3DSAMP_ADDRESSV, D3DTADDRESS_MIRROR);

夹取纹理寻址

g_pd3dDevice->SetSamplerState(0, D3DSAMP_ADDRESSU, D3DTADDRESS_CLAMP);
g_pd3dDevice->SetSamplerState(0, D3DSAMP_ADDRESSV, D3DTADDRESS_CLAMP);

边框纹理寻址

g_pd3dDevice->SetSamplerState(0, D3DSAMP_ADDRESSU, D3DTADDRESS_BORDER);
g_pd3dDevice->SetSamplerState(0, D3DSAMP_ADDRESSV, D3DTADDRESS_BORDER);

纹理寻址没有效果?

定义顶点缓存的uv

struct VERTEX
{
    float _x, _y, _z;               
    float _u, _v; // 纹理坐标
    VERTEX(float x, float y, float z, float u, float v) : _x(x), _y(y), _z(z), _u(u), _v(v) {}
};
#define D3DFVF_VERTEX (D3DFVF_XYZ | D3DFVF_TEX1)

填充

v[0] = VERTEX(-1, 1, -1, 0.0f, 0.0f);
v[1] = VERTEX(1, 1, -1, 2.0f, 0.0f);
v[2] = VERTEX(1, -1, -1, 2.0f, 2.0f);
v[3] = VERTEX(-1, -1, -1, 0.0f, 2.0f);
。。。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值