游戏开发论坛

 找回密码
 立即注册
搜索
查看: 1446|回复: 2

旋转不均匀的arcball

[复制链接]

48

主题

142

帖子

142

积分

注册会员

Rank: 2

积分
142
发表于 2006-12-15 23:48:00 | 显示全部楼层 |阅读模式
DXUTmisc.cpp文件中的CD3DArcBall类可以实现鼠标拖动三维旋转,下面是有关代码片段:
D3DXVECTOR3 CD3DArcBall::ScreenToVector( float fScreenPtX, float fScreenPtY )
{
    // Scale to screen
    FLOAT x   = -(fScreenPtX - m_Offset.x - m_nWidth/2)  / (m_fRadius*m_nWidth/2);
    FLOAT y   =  (fScreenPtY - m_Offset.y - m_nHeight/2) / (m_fRadius*m_nHeight/2);

    FLOAT z   = 0.0f;
    FLOAT mag = x*x + y*y;

    if( mag > 1.0f )
    {
        FLOAT scale = 1.0f/sqrtf(mag);
        x *= scale;
        y *= scale;
    }
    else
        z = sqrtf( 1.0f - mag );

    // Return vector
    return D3DXVECTOR3( x, y, z );
}
我想让它只做二维旋转,比如在x, y平面转,于是我将某些代码注释(12345):
D3DXVECTOR3 CD3DArcBall::ScreenToVector( float fScreenPtX, float fScreenPtY )
{
    // Scale to screen
    FLOAT x   = -(fScreenPtX - m_Offset.x - m_nWidth/2)  / (m_fRadius*m_nWidth/2);
    FLOAT y   =  (fScreenPtY - m_Offset.y - m_nHeight/2) / (m_fRadius*m_nHeight/2);

    FLOAT z   = 0.0f;
    FLOAT mag = x*x + y*y;

   // if( mag > 1.0f )-------------------------------------------------@1
   // {----------------------------------------------------------------------@2
        FLOAT scale = 1.0f/sqrtf(mag);
        x *= scale;
        y *= scale;
   // }------------------------------------------------------------------------@3
    //else---------------------------------------------------------------------@4
     //   z = sqrtf( 1.0f - mag );---------------------------------------@5

    // Return vector
    return D3DXVECTOR3( x, y, z );
}
运行后,模型转得比鼠标快一圈,而且是非匀速的.
请问高手是什么原因?
如何使模型局限在XY方向拖动旋转,并且与鼠标旋转的速度、方向一致?
谢谢!

0

主题

6

帖子

6

积分

新手上路

Rank: 1

积分
6
发表于 2006-12-17 15:40:00 | 显示全部楼层

Re:旋转不均匀的arcball

arcball是把屏幕2D坐标映射到球面坐标上的,所以你会觉得和鼠标移动不一致
若要局限在XY方向,可以把X和Y的旋转相乘,但会碰到万向锁的问题~

48

主题

142

帖子

142

积分

注册会员

Rank: 2

积分
142
 楼主| 发表于 2006-12-18 14:34:00 | 显示全部楼层

Re:旋转不均匀的arcball

谢谢楼上的.
可以用矩阵实现么?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-1-26 03:13

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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