www.pudn.com > tomohide_fur.03.13.02.zip > trackball.cpp


//----------------------------------------------------------------------------- 
// File: trackball.cpp 
// 
// Copyright (C) 2001-2002 Tomohide Kano. All rights reserved. 
//----------------------------------------------------------------------------- 
 
#include  
 
inline 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; 
}