|
发表于 2010-8-5 18:23:22
|
显示全部楼层
5# answer1103
producer 是很早以前版本里的东西,那两个例子只是让您看一看得,具体做法需要改变一下。您需要的效果这样做一下应该就可以了:
osg::Matrixd myCameraMatrix;
osg::Matrixd cameraRotation;
osg::Matrixd cameraTrans;
cameraRotation.makeRotate(
osg:egreesToRadians(-20.0), osg::Vec3(0,1,0), // 滚转角(Y轴)
osg::DegreesToRadians(-15.0), osg::Vec3(1,0,0) , // 俯仰角(X轴)
osg::DegreesToRadians( 10.0), osg::Vec3(0,0,1) ); // 航向角(Z轴)
// 相机位于坦克之后60个单元,之上7个单元。
cameraTrans.makeTranslate( 10,-50,15 );
myCameraMatrix = cameraRotation * cameraTrans;
你如果有添加manipulator的话,就这样:
osg::Matrixd i = myCameraMatrix.inverse(myCameraMatrix);
viewer.getCameraManipulator()->setByInverseMatrix( osg::Matrix(i.ptr() ) *osg::Matrix::rotate( -osg:I/2.0, 1, 0, 0 ));
应该就可以啦。 |
|