来看看Transform类。
AutoTransform、MatrixTransform、PositionAttitudeTransform、DOFTransform、Camera等都是
Transform的子类,用于进行变换操作。
Transform继承自Group,所有子节点可以通过一个矩阵变换,产生操作器和动画等效果。特别强调了如
果进行缩放,应该重新计算法向量, stateset->setMode(GL_NORMALIZE, osg::StateAttribute::ON);
在OpenGL中有两个计算法向量的模式:GL_NORMALIZE and GL_RESCALE_NORMAL,GL_RESCALE_NORMAL是
xyz都乘同一个因子,GL_NORMALIZE各个方向乘不同的因子,因此效果好,但计算量大。
Transform中RELATIVE_RF,ABSOLUTE_RF很重要,RELATIVE_RF是参考父节点的相对矩阵,ABSOLUTE_RF是
相对于绝对坐标的。因此,在调用computeLocalToWorldMatrix和computeWorldToLocalMatrix时候会根
据ReferenceFrame的值是否乘上父节点的矩阵。
Transform中只提供了一个接口,真正的实现都在其子类,我们看一下MatrixTransform,
MatrixTransform中保存了一个节点的变换矩阵_matrix,
看这两个函数:
bool MatrixTransform::computeLocalToWorldMatrix(Matrix& matrix,NodeVisitor*) const
{
if
(_refere