Example #1
0
void Drawable::SetGLMatTraQuat(double *tra, double *quat, bool flip)
{
	Rotation r;
	if (quat != 0)
	{
		CvMat cv_mat;
		cvInitMatHeader(&cv_mat, 4, 1, CV_64F, quat);
		r.SetQuaternion(&cv_mat);
	}

	int flp = 1;
	if (flip)
	{
		r.Transpose();
		//flp=-1;
	}

	CvMat cv_gl_mat;
	cvInitMatHeader(&cv_gl_mat, 4, 4, CV_64F, gl_mat); cvZero(&cv_gl_mat);
	r.GetMatrix(&cv_gl_mat);
	cvSet2D(&cv_gl_mat, 0, 3, cvScalar(flp*tra[0]));
	cvSet2D(&cv_gl_mat, 1, 3, cvScalar(flp*tra[1]));
	cvSet2D(&cv_gl_mat, 2, 3, cvScalar(flp*tra[2]));
	cvSet2D(&cv_gl_mat, 3, 3, cvScalar(1));

	cvTranspose(&cv_gl_mat, &cv_gl_mat);
}