游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2590|回复: 8

在DX里如何让图片旋转

[复制链接]

37

主题

171

帖子

177

积分

注册会员

Rank: 2

积分
177
发表于 2006-2-3 14:53:00 | 显示全部楼层 |阅读模式
如何让图片围绕某个确定的点旋转?
我用的是.NET+DX9

13

主题

594

帖子

595

积分

高级会员

Rank: 4

积分
595
发表于 2006-2-3 15:58:00 | 显示全部楼层

Re:在DX里如何让图片旋转

3个矩阵

第一个,移动位置,使移动的中心点=原点
第二个,旋转
第三个,移回到原来的位置

最后依此合并这3个矩阵

130

主题

2714

帖子

2714

积分

金牌会员

Rank: 6Rank: 6

积分
2714
发表于 2006-2-3 16:22:00 | 显示全部楼层

Re:在DX里如何让图片旋转

人家根本不是问你这个。


http://bbs.GameRes.com/upload/sf_20062111437.rar

32

主题

1583

帖子

1589

积分

金牌会员

Rank: 6Rank: 6

积分
1589
发表于 2006-2-3 19:27:00 | 显示全部楼层

Re: Re:在DX里如何让图片旋转

wangh: Re:在DX里如何让图片旋转

3个矩阵

第一个,移动位置,使移动的中心点=原点
第二个,旋转
第三个,移回到原来的位置

最后依此合并这3个矩阵



正解。至少D3D是这样。

130

主题

2714

帖子

2714

积分

金牌会员

Rank: 6Rank: 6

积分
2714
发表于 2006-2-3 20:19:00 | 显示全部楼层

Re: Re:在DX里如何让图片旋转

azureyes: Re:在DX里如何让图片旋转

贴个没有代码的EXE,还不如楼上了.


我回答的是两个问题,和EXE无关。

37

主题

171

帖子

177

积分

注册会员

Rank: 2

积分
177
 楼主| 发表于 2006-2-4 15:49:00 | 显示全部楼层

Re: Re:在DX里如何让图片旋转

wangh: Re:在DX里如何让图片旋转

3个矩阵

第一个,移动位置,使移动的中心点=原点
第二个,旋转
第三个,移回到原来的位置

最后依此合并这3个矩阵


原理明白,可不太明白代码应该如何写,能不能写个例子.多谢了 :-)

13

主题

594

帖子

595

积分

高级会员

Rank: 4

积分
595
发表于 2006-2-4 17:13:00 | 显示全部楼层

Re: 在DX里如何让图片旋转

    Public Sub Draw(ByVal x As Single, ByVal y As Single, ByVal angle As Single)
        Dim tMStart As Matrix = Matrix.Translation(-x, -y, 0) '移向原点的矩阵
        Dim tMRota As Matrix = Matrix.RotationZ(angle) '旋转矩阵
        Dim tMEnd As Matrix = Matrix.Translation(x, y, 0) '移回原来位置的矩阵
        tMRota.Multiply(tMEnd)
        tMStart.Multiply(tMRota)
        mSprite.Transform = tMStart '设置矩阵
        mVector.X = x + CenterX '中心点偏移
        mVector.Y = y + CenterY
        mSprite.Draw(mTex, New Vector3, mVector, &HFFFFFFFF)
    End Sub

13

主题

594

帖子

595

积分

高级会员

Rank: 4

积分
595
发表于 2006-2-4 21:41:00 | 显示全部楼层

Re: 在DX里如何让图片旋转

跟踪执行了一下,发现MDX库里的一些函数效率低得可怕
改成手动生成变换矩阵,速度快两倍左右

    Public Shared ReadOnly MatrixIdentity As Matrix = Matrix.Identity
    Public Sub Draw(ByVal x As Single, ByVal y As Single, ByVal angle As Single)
        Dim tMStart As Matrix = MatrixIdentity '移向原点的矩阵
        tMStart.M41 = -x
        tMStart.M42 = -y
        Dim tMRota As Matrix = MatrixIdentity '旋转矩阵
        Dim tCosV As Single = Math.Cos(angle)
        Dim tSinV As Single = Math.Sin(angle)
        tMRota.M11 = tCosV
        tMRota.M21 = -tSinV
        tMRota.M12 = tSinV
        tMRota.M22 = tCosV
        Dim tMEnd As Matrix = MatrixIdentity '移回原来位置的矩阵
        tMEnd.M41 = x
        tMEnd.M42 = y
        tMRota.Multiply(tMEnd)
        tMStart.Multiply(tMRota)
        mSprite.Transform = tMStart '设置矩阵
        mVector.X = x + CenterX '中心点偏移
        mVector.Y = y + CenterY
        mSprite.Draw(mTex, New Vector3, mVector, &HFFFFFFFF)
    End Sub

37

主题

171

帖子

177

积分

注册会员

Rank: 2

积分
177
 楼主| 发表于 2006-2-5 13:08:00 | 显示全部楼层

Re:在DX里如何让图片旋转

厉害,我去研究一下.
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-1-23 09:19

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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