游戏开发论坛

 找回密码
 立即注册
搜索
查看: 1585|回复: 1

问个用SetTransform设置矩阵转换贴图坐标的菜鸟问题,望大

[复制链接]

30

主题

90

帖子

94

积分

注册会员

Rank: 2

积分
94
发表于 2006-9-5 18:11:00 | 显示全部楼层 |阅读模式
我按照SDK上说的做了,但奇怪的是,旋转和缩放矩阵都可以起作用,让纹理转啊、缩放啊,但就是平移矩阵不起作用,至少看上纹理是一丝不动的!
D3DXMATRIX mtxTex;
D3DXMatrixTranslation(&mtxTex, 0, m_TexTransformX, 0);//, m_TexTransformX, m_TexTransformX);
m_pd3dDevice->SetTransform(D3DTS_TEXTURE0, &mtxTex);
m_pd3dDevice->SetTextureStageState( 0, D3DTSS_TEXTURETRANSFORMFLAGS,
                                 D3DTTFF_COUNT2);
m_TexTransformX = 0.5f * m_fTime + 2.0f;
我以为是移动的太快了(我有1000多FPS),每桢都移回原点了,所以看上去没动,但是把那个m_TexTransformX改了很多,都是不行。请大侠看看是怎么回事?

30

主题

90

帖子

94

积分

注册会员

Rank: 2

积分
94
 楼主| 发表于 2006-9-5 19:31:00 | 显示全部楼层

Re:问个用SetTransform设置矩阵转换贴图坐标的菜鸟问题,望

When we translate 3D objects, the translation values are found in the fourth row of the world transformation matrix. However, since textures are specified in a 2D coordinate space, the translation values in the texture transform matrix are located in the THIRD row of the texture transform matrix.
--- from gamedev.net
当我们平移一个3D物体时,平移值位于矩阵的第四行(D3D左手坐标系),然而纹理的坐标是2D的,对纹理坐标来说,平移值是位于矩阵的第三行的,所以使用D3DXMatrixTranslation函数得到的平移矩阵是没有作用的,因为这个函数返回的平移矩阵都把平移值放在了第四行。也就是说,纹理坐标的转换矩阵其实是3*3的。
结论:如果要用矩阵转换纹理的坐标,旋转和缩放都可以使用D3DX开头的那些函数生成,但平移必须手动把平移的值写在矩阵的_31和_32的位置,_31对应u,_32对应v。最后得出来的新uv是:u = u + _31; v = v + _32;
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-25 07:26

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表