游戏开发论坛

 找回密码
 立即注册
搜索
查看: 4178|回复: 6

如何用D3DXMatrixRotationZ 函数实现鼠标绕轴拖动旋转?

[复制链接]

48

主题

142

帖子

142

积分

注册会员

Rank: 2

积分
142
发表于 2007-1-4 23:03:00 | 显示全部楼层 |阅读模式
比如Z轴.
关键是FLOAT Angle怎么计算?
角度是动态的,取值0~360.
下面是我曾经的算法
1.获取鼠标的坐标,
2.生成鼠标坐标到旋转轴的向量V1,
3.获取鼠标拖动后的坐标,
4.生成新的鼠标坐标到旋转轴的向量V2,
5.规范化向量,
6.V1,V2向量相乘,得两向量夹角的余旋,
7.求正旋,或用反三角函数acos,
8.用矩阵
  cosa,sina,0.0,0.0,
  -sina,cosa,0.0,0.0,
  0.0,0.0,1.0,0.0,
   0.0,0.0,0.0,1.0    ,

用函数D3DXMatrixRotationZ(  D3DXMATRIX *pOut,FLOAT Angle)
都不行,转不了一圈的.
求达人指点.

4

主题

88

帖子

88

积分

注册会员

Rank: 2

积分
88
发表于 2007-1-5 12:40:00 | 显示全部楼层

Re:如何用D3DXMatrixRotationZ 函数实现鼠标绕轴拖动旋转?

把你的1234567步去掉,设置个变量,比如FLOAT Angle,设一个基本的增量,鼠标移动对应相对的增量,直接用D3DXMatrixRotationZ函数就OK了,不需要自己算。

另外,你获得的鼠标位置是什么位置?鼠标在屏幕的2维坐标吗?用2维坐标和3维坐标算夹角,这么做明显不符合逻辑啊,要是非这么弄,就用D3DXProject把你屏幕上的鼠标所在点投影到3维空间去,再算夹角。

48

主题

142

帖子

142

积分

注册会员

Rank: 2

积分
142
 楼主| 发表于 2007-1-5 22:00:00 | 显示全部楼层

Re:如何用D3DXMatrixRotationZ 函数实现鼠标绕轴拖动旋转?

好,好.
非常感谢jjjyes.
我把Z方向的分量设置为零,把3维的当作2维的用了,嘿.

48

主题

142

帖子

142

积分

注册会员

Rank: 2

积分
142
 楼主| 发表于 2007-1-7 21:44:00 | 显示全部楼层

Re:如何用D3DXMatrixRotationZ 函数实现鼠标绕轴拖动旋转?

但是怎么表达鼠标本身的移动呢?
比如绕轴的顺时针,逆时针移动.

4

主题

88

帖子

88

积分

注册会员

Rank: 2

积分
88
发表于 2007-1-9 10:34:00 | 显示全部楼层

Re:如何用D3DXMatrixRotationZ 函数实现鼠标绕轴拖动旋转?

如果使用windows消息机制的话,下面就是当前的鼠标位置
MousePoint.x = LOWORD(lParam);
MousePoint.y = HIWORD(lParam);用这个坐标与上次坐标,就可以算出位移量,判断一下位移的方向就可以了,显然你能完成,我就不说啦:)
至于DInput获得鼠标的信息的方法。。。实在是太简单了,我不用说了吧。。--_--!

48

主题

142

帖子

142

积分

注册会员

Rank: 2

积分
142
 楼主| 发表于 2007-1-12 13:40:00 | 显示全部楼层

Re:如何用D3DXMatrixRotationZ 函数实现鼠标绕轴拖动旋转?

终于弄出来了,用了很多个if else语句.
谢谢jjjyes
给予同志般的拥抱.

4

主题

88

帖子

88

积分

注册会员

Rank: 2

积分
88
发表于 2007-1-16 12:21:00 | 显示全部楼层

Re:如何用D3DXMatrixRotationZ 函数实现鼠标绕轴拖动旋转?

呵呵,客气,一切都是尝试出来的,大家一起研究嘛:)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-1-26 06:56

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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