|
楼主 |
发表于 2009-4-1 11:23:58
|
显示全部楼层
上面的代码是从项目里面抽取出来的。
在实际的代码里面 是有重新计算home位置的代码的。- void QManipulatorBase::gotoHome()
- {
- _rotation = Vec3(osg::PI_2, 0, 0);
- _position = Vec3(-10, -10, 0);
- if(_model.valid())
- {
- Vec3 center=_model->getBound().center();
- _position=Vec3(center.x(),
- center.y()-2*_model->getBound().radius(),0);
- }
- computeMatrix();
- }
复制代码 我的Manipulator是自己写的 在事件中按下home就会调用gotoHome这个方法. 其中computeMatrix的代码如下:- void QManipulatorBase::computeMatrix() {
- _curMatrix.makeRotate(_rotation._v[0], Vec3(1, 0, 0), _rotation._v[1],
- Vec3(0, 1, 0), _rotation._v[2], Vec3(0, 0, 1));
- _curMatrix = _curMatrix * Matrix::translate(_position);
- _curInverseMatrix = Matrix::inverse(_curMatrix);
- }
复制代码 其实就是把计算结果保存起来 这样就不用每次getMatrix的时候都做矩阵计算了.
使用OSG的sample data都可以实现效果。在按下home后 相机都会朝向节点 虽然有时候节点不在屏幕中央 但是,节点肯定是在视野中的。只有用这个shapefile的时候就初相这个问题.
另外:我自己从MatrixManipulator派生的类 是不是要重写home函数? |
|