|
本帖最后由 warding 于 2010-10-19 12:42 编辑
浏览了几个关于坐标系帖子,特别是ARRAY版主解答的
http://bbs.osgchina.org/viewthread.php?tid=309&highlight=%D7%F8%B1%EA%CF%B5%2BX%2BY%2BZ
////////////////////////////////////////////////
其中示例:
osgViewer::Viewer viewer;
viewer.setSceneData( osgDB::readNodeFile( "cow.osg" ) );
viewer.getCamera()->setProjectionMatrixAsPerspective( 40., 1., 1., 100. );
// 创建矩阵,指定到视点的距离。
osg::Matrix trans;
trans.makeTranslate( 0., 0., -12. );
// 旋转一定角度(弧度值)。
double angle( 0. );
while (!viewer.done())
{
// 创建旋转矩阵。
osg::Matrix rot;
rot.makeRotate( angle, osg::Vec3( 1., 0., 0. ) );
angle += 0.01;
// 设置视口矩阵(旋转矩阵和平移矩阵连乘)。
viewer.getCamera()->setViewMatrix( rot * trans );
// 绘制下一帧
viewer.frame();
}
////////////////////////////////////////////////////
有些还是不很理解,可能问的很低级......
开始 摄象机坐标系的原点和世界坐标系 三维世界的坐标系(所有模型的根结点的坐标系,不知道可不可以这样理解?)原点是重合的?当
osg::Matrix trans;
trans.makeTranslate( 0., 0., -12. );
viewer.getCamera()->setViewMatrix(trans );
此时 三维世界的坐标系的原点变到了 世界坐标系(摄象机坐标系)中的(0,0,-12)?
osg::Matrix rot;
rot.makeRotate( angle, osg::Vec3( 1., 0., 0. ) );
angle += 0.01;
viewer.getCamera()->setViewMatrix(rot);
请教此处的绕X轴旋转 ,这个X轴是什么坐标系的X轴?(Array:关键的问题是setViewMatrix函数到底做了什么:它的作用并非是让摄像机运动!而是让整个三维世界·按照摄像机坐标系(而非绝对坐标系)·实现运动)
viewer.getCamera()->setViewMatrix(rot);
修改的是摄像机的观察矩阵:即,在摄像机坐标系中,三维世界相对于摄像机的位置。
是通过什么来修改摄象机变换场景的? |
|