U理坐标变换

Direct3D提供了对生成的纹理坐标进行坐标变换的功能Q与点坐标变换相类|可以指定一?x4的纹理坐标变换矩阵,把它与生成的U理坐标怹Q然后将变换之后的纹理坐标输Direct3D渲染水Uѝ用纹理坐标变换可以对U理坐标q行诸如q移、旋转和~放{三l变换。纹理坐标变换对于生成一些特D效果是非常有用的,它不用直接修攚w点的U理坐标。例如可以通过一个简单的q移矩阵对纹理坐标进行变换,从而物体表面上的U理不断变换位置Q生动L果。纹理坐标自动生成在三维囑ŞE序中最q泛的应用是环境映射?/p>

可通过函数IDirect3DDevice9::SetTransform()来设|?x4的纹理坐标变换矩阵,它以D3DTS_TEXTURE0~ D3DTS_TEXTURE7作ؓW一个参敎ͼ表示讄U理?~7的纹理矩c下列代码对U理?讄了一个将U理坐标u、v~小到原来一半的U理矩阵Q?/p>

D3DXMATRIX mat;
D3DXMatrixIdentity(&mat);
mat._11 = 0.5f;
mat._22 = 0.5f;
pd3dDevice->SetTransform(D3DTS_TEXTURE0, &mat);

下面的代码将原来的纹理坐标^U(1.0, 1.0, 0Q个单位?/p>

D3DXMATRIX mat;
D3DXMatrixIdentity(&mat);
mat._41 = 1.0f;
mat._42 = 1.0f;
mat._43 = 0.0f;
pd3dDevice->SetTransform(D3DTS_TEXTURE0, &mat);

CZE序通过下列代码对自动生成的U理坐标q行变换Q?/p>

// texture coordinate transform

D3DXMATRIX mat_texture, mat_scale, mat_trans;

D3DXMatrixIdentity(&mat_texture);
D3DXMatrixScaling(&mat_scale, 0.5f, -0.5f, 1.0f);
D3DXMatrixTranslation(&mat_trans, 0.5f, 0.5f, 1.0f);

mat_texture = mat_texture * mat_scale * mat_trans;
pd3dDevice->SetTransform(D3DTS_TEXTURE0, &mat_texture);


要看效果和完整代?br>M面这个主?br>
http://www.cnblogs.com/billwillman/articles/1232081.html


注:U理矩阵很好很强大。可以做单的_天空盒背景等效果?br>更ؓ严重的是Q还能做出流光效果,像《蜀门》上的服效果。?br>