www.pudn.com > tomohide_fur.03.13.02.zip > trackball.cpp
//----------------------------------------------------------------------------- // File: trackball.cpp // // Copyright (C) 2001-2002 Tomohide Kano. All rights reserved. //----------------------------------------------------------------------------- #includeinline void project(D3DXVECTOR3 *v, const D3DXVECTOR2 *p) { v->x = p->x; v->y = p->y; v->z = expf(-(p->x*p->x + p->y*p->y)); D3DXVec3Normalize(v, v); } void trackball(D3DXQUATERNION *q, const D3DXVECTOR2 *p1, const D3DXVECTOR2 *p2) { D3DXVECTOR3 v1, v2, cross; project(&v1, p1); project(&v2, p2); D3DXVec3Cross(&cross, &v1, &v2); float a = sqrtf(2.0f * (1.0f + D3DXVec3Dot(&v1, &v2))); q->x = cross.x / a; q->y = cross.y / a; q->z = cross.z / a; q->w = 0.5f * a; }