chai3d中的全局坐标和局部坐标作用

/* Note:Your choice is C IDE */
void cGenericObject::ComputeGlobalPosition(cVector3d& a_globalPos, cVector3d& a_glonalRot)
{
	//update global position vector and global rotation matrix
	m_globalPos = cAdd(a_globalPos,cMul(a_globalRot,m_localPos));
	m_globalRot = cMul(a_globalRot,m_localRot);
	
	for(int i=0;i<m_children.size()li++)
	{
		m_children[i]->computeGlobalPosition(m_globalPos,m_globalRot);
	}
}

cVector3d m_localPos   //在上一个节点坐标系下的对象坐标系位置

cVector3d m_globalPos  //在世界坐标系下的对象坐标系的位置

cMatrix3d m_localRot  //将当前对象坐标系下的坐标转换到上一个节点坐标系下的旋转矩阵

cMatrix3d m_globalRot //将当前对象坐标系下的坐标转换到世界坐标系下的旋转矩阵


比如现在有三个坐标系A,B,C。其中A是世界坐标系;B是逆时针旋转45度,然后平移位置(1,1,0)后建立的坐标系;C是在B坐标系下平移(1,0,0)位置后的坐标系。它们的实际位置如图所示,现在求C坐标系在世界坐标系下的位置。

使用上面的函数,先求B坐标系的m_globalPos、m_globalRot,然后求C的m_globalPos、m_globalRot。因为C的m_localPos为(1,0,0),m_localRot为单位矩阵。

m_globalPos = cAdd(a_globalPos,cMul(a_globalRot,m_localPos));
上面的代码就是将C的原点坐标转化到世界坐标系下的坐标,就表示为将B坐标系下C坐标转化到世界坐标系下,就是坐标p*坐标系的变换矩阵M(局部坐标系下的坐标转化为世界坐标系下的坐标,先旋转,后平移);

你可能感兴趣的:(chai3d中的全局坐标和局部坐标作用)