mirror of
				https://github.com/aap/librw.git
				synced 2025-11-04 00:41:59 +00:00 
			
		
		
		
	quat->mat
This commit is contained in:
		
							parent
							
								
									9bc57a0641
								
							
						
					
					
						commit
						91291709d8
					
				@ -84,6 +84,24 @@ cross(const V3d &a, const V3d &b)
 | 
				
			|||||||
	           a.x*b.y - a.y*b.x);
 | 
						           a.x*b.y - a.y*b.x);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Matrix
 | 
				
			||||||
 | 
					Matrix::makeRotation(const Quat &q)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						Matrix res;
 | 
				
			||||||
 | 
						res.right.x = q.w*q.w + q.x*q.x - q.y*q.y - q.z*q.z;
 | 
				
			||||||
 | 
						res.right.y = 2*q.w*q.z + 2*q.x*q.y;
 | 
				
			||||||
 | 
						res.right.z = 2*q.x*q.z - 2*q.w*q.y;
 | 
				
			||||||
 | 
						res.up.x    = 2*q.x*q.y - 2*q.w*q.z;
 | 
				
			||||||
 | 
						res.up.y    = q.w*q.w - q.x*q.x + q.y*q.y - q.z*q.z;
 | 
				
			||||||
 | 
						res.up.z    = 2*q.w*q.x + 2*q.y*q.z;
 | 
				
			||||||
 | 
						res.at.x    = 2*q.w*q.y + 2*q.x*q.z;
 | 
				
			||||||
 | 
						res.at.y    = 2*q.y*q.z - 2*q.w*q.x;
 | 
				
			||||||
 | 
						res.at.z    = q.w*q.w - q.x*q.x - q.y*q.y + q.z*q.z;
 | 
				
			||||||
 | 
						res.rightw = res.upw = res.atw = 0.0f;
 | 
				
			||||||
 | 
						res.posw = 1.0f;
 | 
				
			||||||
 | 
						return res;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void
 | 
					void
 | 
				
			||||||
Matrix::setIdentity(void)
 | 
					Matrix::setIdentity(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
@ -135,6 +153,22 @@ Matrix::transpose(Matrix *m1, Matrix *m2)
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Matrix3
 | 
				
			||||||
 | 
					Matrix3::makeRotation(const Quat &q)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						Matrix3 res;
 | 
				
			||||||
 | 
						res.right.x = q.w*q.w + q.x*q.x - q.y*q.y - q.z*q.z;
 | 
				
			||||||
 | 
						res.right.y = 2*q.w*q.z + 2*q.x*q.y;
 | 
				
			||||||
 | 
						res.right.z = 2*q.x*q.z - 2*q.w*q.y;
 | 
				
			||||||
 | 
						res.up.x    = 2*q.x*q.y - 2*q.w*q.z;
 | 
				
			||||||
 | 
						res.up.y    = q.w*q.w - q.x*q.x + q.y*q.y - q.z*q.z;
 | 
				
			||||||
 | 
						res.up.z    = 2*q.w*q.x + 2*q.y*q.z;
 | 
				
			||||||
 | 
						res.at.x    = 2*q.w*q.y + 2*q.x*q.z;
 | 
				
			||||||
 | 
						res.at.y    = 2*q.y*q.z - 2*q.w*q.x;
 | 
				
			||||||
 | 
						res.at.z    = q.w*q.w - q.x*q.x - q.y*q.y + q.z*q.z;
 | 
				
			||||||
 | 
						return res;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
						
 | 
				
			||||||
void
 | 
					void
 | 
				
			||||||
Matrix3::setIdentity(void)
 | 
					Matrix3::setIdentity(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 | 
				
			|||||||
@ -118,6 +118,7 @@ struct Matrix
 | 
				
			|||||||
	V3d pos;
 | 
						V3d pos;
 | 
				
			||||||
	float32 posw;
 | 
						float32 posw;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						static Matrix makeRotation(const Quat &q);
 | 
				
			||||||
	void setIdentity(void);
 | 
						void setIdentity(void);
 | 
				
			||||||
	V3d transPoint(const V3d &p);
 | 
						V3d transPoint(const V3d &p);
 | 
				
			||||||
	V3d transVec(const V3d &v);
 | 
						V3d transVec(const V3d &v);
 | 
				
			||||||
@ -132,6 +133,7 @@ struct Matrix3
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
	V3d right, up, at;
 | 
						V3d right, up, at;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						static Matrix3 makeRotation(const Quat &q);
 | 
				
			||||||
	void setIdentity(void);
 | 
						void setIdentity(void);
 | 
				
			||||||
	V3d transVec(const V3d &v);
 | 
						V3d transVec(const V3d &v);
 | 
				
			||||||
	bool32 isIdentity(void);
 | 
						bool32 isIdentity(void);
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user