游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2147|回复: 3

关于direct中绕任意轴旋转的问题?

[复制链接]

10

主题

25

帖子

25

积分

注册会员

Rank: 2

积分
25
发表于 2011-8-15 16:34:00 | 显示全部楼层 |阅读模式
绕任意轴方法:
D3DXMATRIX*D3DXMatrixRotationAxis(

         D3DXMATRIX* pOut,//returnsrotationmatrix

         CONST D3DXVECTOR3* pV,//axistorotatearound
         FLOATAngle//angle,inradians,torotate

     );
需要绕D3DXVECTOR3* pV向量表示的轴旋转。
但我的问题是这种向量只能表示从原点出发的,那我要真正绕空间中任意一个向量旋转有怎么办喃?
即时用两个D3DXVECTOR3相加减得到的向量好像也会平移到原点。

2

主题

25

帖子

25

积分

注册会员

Rank: 2

积分
25
发表于 2011-8-16 08:25:00 | 显示全部楼层

Re:关于direct中绕任意轴旋转的问题?

   我是这么弄的
// 鼠标左键旋转
    static float fAngleX = 0.0f, fAngleY = 0.0f;
    if (g_diMouseState.rgbButtons[0] & 0x80)
    {
        fAngleX += g_diMouseState.lY * -0.01f;
        fAngleY += g_diMouseState.lX * -0.01f;
    }
    D3DXMATRIX Rx, Ry;
    D3DXMatrixRotationX(&Rx, fAngleX);
    D3DXMatrixRotationY(&Ry, fAngleY);
   


    matWorld = Rx * Ry * matWorld;
    Device->SetTransform(D3DTS_WORLD, &matWorld);

9

主题

62

帖子

62

积分

注册会员

Rank: 2

积分
62
发表于 2011-8-16 10:21:00 | 显示全部楼层

Re:关于direct中绕任意轴旋转的问题?

旋转完了再平移过去就好了

9

主题

62

帖子

62

积分

注册会员

Rank: 2

积分
62
发表于 2011-8-16 10:33:00 | 显示全部楼层

Re:关于direct中绕任意轴旋转的问题?

还可以用下面的函数,指明世界空间里的一个旋转中心,并用四元数来表示旋转
D3DXMATRIX *WINAPI D3DXMatrixTransformation(          D3DXMATRIX *pOut,
    CONST D3DXVECTOR3 *pScalingCenter,
    CONST D3DXQUATERNION *pScalingRotation,
    CONST D3DXVECTOR3 *pScaling,
    CONST D3DXVECTOR3 *pRotationCenter,
    CONST D3DXQUATERNION *pRotation,
    CONST D3DXVECTOR3 *pTranslation
);
例:
D3DXQUATERNION quaTmp;
D3DXMATIRX matWorld;
D3DXVERTOR3 v1,v2;
float fAngle;
D3DXMatrixIdentity(&matWorld);
D3DXQuaternionRotationAxis(&quaTmp,D3DXVec3Normalize(&(v1-v2)),fAngle);
D3DXMatrixTransformation(&matWorld,NULL,NULL,NULL,&(v1+v2)/2,&quaTmp,NULL);
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-6-8 16:09

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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