|
发表于 2014-3-27 21:54:15
|
显示全部楼层
1. 向量和矩阵维数运算对齐的事,你就不必担心了,osg已经处理好了,可以直接这样运算 osg::vec3 = osg::vec3 * osg::Matix。
可以查看osg::Matix源码 乘法运算符的重载。
2. 如果 投影矩阵 vpw = ViewMatrix*ProjectionMatrix*WindowMatrix;
空间坐标osg::vec3 space在屏幕上的投影 osg::vec3 winp = osg::vec3 space*vpw;
winp.x(),winp.y()就是屏幕坐标,winp.z()肯定为0代表其深度值。
屏幕坐标x,y的空间坐标值 osg::vec3 space = osg::vec3(x,y,0)*osg::Matix::inverse(vpw);
视锥体近平面就是屏幕,远平面到近平面任意一条视线的深度归一化为1,
所以屏幕坐标x,y远平面上对应的空间坐标值 osg::vec3 farspace = osg::vec3(x,y,1)*osg::Matix::inverse(vpw);
你可以根据此公式计算视线上任意一点的空间坐标,深度为0的就是屏幕上对应的空间点。
3. 矩阵运算唯一需要注意的是 osg::Matix是行向量排列,而我们在书本上的姿态矩阵一般是列向量排列,
所以矩阵转置后,前乘后乘代表的绝对运动和相对运动的意义就变了 , 注意吧
不知道这样能说能说明白吗,代码不会像运算公式那样齐整,怎么用,要看其具体是怎么实现的! |
|