|
|
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方向拖动旋转,并且与鼠标旋转的速度、方向一致?
谢谢!
|
|