osg 相机坐标系

先看这个例子:


#include <Windows.h>

#include <osgViewer/Viewer>
#include <osgDB/ReadFile>
#include <osg/Node>

int main(int argc,char** argv)
{
	osgViewer::Viewer view;

	view.setSceneData(osgDB::readNodeFile("cow.osg"));

	view.getCamera()->setProjectionMatrixAsPerspective(40.,1.,1.,100.);
	osg::Matrix trans;
	trans.makeTranslate(0.,0.,-12.);
	double angle(0.0);
	while (!view.done())
	{
		osg::Matrix rot;

		rot.makeRotate(angle,osg::Vec3(1.0,0.,0.));
		angle+=0.01;
		view.getCamera()->setViewMatrix(rot*trans);
		view.frame();
	}

	return 0;
}


1、程序执行结果:
将相机设置到世界坐标系(0,0,12)的位置,向下看牛。同时,牛绕着x轴自传。

2、解说:
相机坐标系,和OpenGL的相机坐标系一致,+x:向右,+y:向上,+z:向前(向屏幕内部),

执行trans.makeTranslate(0.,0.,-12.);相当于讲像机从(0,0,0)移到(0,0,12)位置

(其实,也可以理解为:视图矩阵,就是相机在三维世界中,从原点变换到观察点所经过的变换矩阵的逆矩阵,

这样完全不用考虑相机坐标系,其实也不存在这一说法,说相机坐标系,只是为了便于理解),

这样正好可以看到牛。

3、为何效果是俯瞰牛呢,因为osg的世界坐标系是使用+z向上建模的。

执行rot.makeRotate(angle,osg::Vec3(1.0,0.,0.));相当说牛处在世界坐标系原来的位置(0,0,0),
相机自己绕着(1,0,0)轴,以12单位长度进行圆周旋转运动。

4、关于osg的坐标系,指的是世界坐标系,而此处操作的是视图坐标系(相机坐标系,是世界坐标系的逆)

5、不要将相机问题同以下概念混淆:OSG坐标相当于OpenGL坐标系绕X轴正向逆时针旋转90度。

其他链接:

1、http://blog.csdn.net/cccstudyer/article/details/44994883
  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值