|
|
我猜想大概这个函数功能就是将屏幕上一点转换为以世界坐标原点(0,0,0)为原点,指向该点的一个向量。
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 );
}
这样它得到屏幕上两个点后就得到从原点发出的两条射线,就可以cross,dot后得到要旋转的轴和旋转的角度。但是这个转换的过程我就看不懂了,感情他这个跟view,proj矩阵都没关系了,是怎么转的哦 |
|