首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网络游戏 >

空间5点构建视图和投影矩阵——可以实现吗

2013-07-01 
空间五点构建视图和投影矩阵——可以实现吗?各位大侠:我的场景里有凸凹不平的地面,地面上有四个自由活动的目

空间五点构建视图和投影矩阵——可以实现吗?
各位大侠:
我的场景里有凸凹不平的地面,地面上有四个自由活动的目标:p1、p2、p3、p4.
我想在空中定点p0处架设一架相机,要使这架相机位置不动,又正好能罩住p1、p2、p3、p4,也就是p1、p2、p3、p4几个点活动时,相机能自动调整可视区域,使几个点总是在摄像机的边沿。
能否构建这样的视图和透视投影矩阵?
跟大侠们说说我的思路:
1、求出相机到四个点的向量并归一化vp1、vp2、vp3、vp4 ;
    (但四个向量的端点不在同一个平面上,所以下面的计算全是近似的值)
2、求出四个点在相机空间的边界盒,计算视野角度和宽高比;最终计算投影矩阵。
3、计算边界盒的中心点,转回世界空间,作为计算视图矩阵的参数。
     2、3两步中却又无法构建相机空间矩阵,两步互相依赖,我觉得这办法似乎不行,无法实现,特向大侠们讨教妙方,请不吝赐教。谢谢!
[解决办法]
两步怎么依赖了?Camera不动的话,View矩阵是不变的,位置朝向肯定是你预先设置好的或者第一帧就算好了再也不改了
[解决办法]
简单的算法
   计算4个顶点的中心点, 让相机看向这个点, 根据这个点和视线方向生成一个空间平面,计算四个点在平面上的投影,剩下的就是计算fov角度的问题,让他能覆盖所有的四个顶点了

理论上不一定完全有解的,比如三个点位于相机前面,一个点位于相机后面
因为楼主假定4个点位于地面,相机位于空中,如果相机高出所有的顶点的话,应该是有解得
[解决办法]
既然相机位置固定,又注视四个点的中心点,那Position和Direction都是知道了,自己再求一下Up,就可以用OpenGL或者D3D的LookAt函数求出View矩阵啦,Up可以用Direction叉乘世界的朝上轴,求出Camera的Right,再用Right叉乘Direction,就是Up了。
我以前也做过类似的东西,不过我是改相机位置的,我觉得改FOV效果不好看,两个点距离特别远的话,一下就把FOV拉太大了,畸变就太严重了,还不如只移动相机把四个点都罩住效果好

热点排行