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

千分散尽还复来 2013-05-12 06:22:45
各位大侠:
我的场景里有凸凹不平的地面,地面上有四个自由活动的目标:p1、p2、p3、p4.
我想在空中定点p0处架设一架相机,要使这架相机位置不动,又正好能罩住p1、p2、p3、p4,也就是p1、p2、p3、p4几个点活动时,相机能自动调整可视区域,使几个点总是在摄像机的边沿。
能否构建这样的视图和透视投影矩阵?
跟大侠们说说我的思路:
1、求出相机到四个点的向量并归一化vp1、vp2、vp3、vp4 ;
(但四个向量的端点不在同一个平面上,所以下面的计算全是近似的值)
2、求出四个点在相机空间的边界盒,计算视野角度和宽高比;最终计算投影矩阵。
3、计算边界盒的中心点,转回世界空间,作为计算视图矩阵的参数。
2、3两步中却又无法构建相机空间矩阵,两步互相依赖,我觉得这办法似乎不行,无法实现,特向大侠们讨教妙方,请不吝赐教。谢谢!
...全文
220 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
引用 10 楼 higter 的回复:
p1,如果刚好在p234的平面上,且在三角形p234内,不管怎么调整,p1也不会到边缘上去
这是没关系的。我只想用相机罩住它们四个,让它们显示在最大的视野范围内就可以了,并不想让它们都跑边缘上去。 本贴暂时不结,只能给100分,让大家费心了,我再另发一帖再给分
higter 2013-05-16
  • 打赏
  • 举报
回复
p1,如果刚好在p234的平面上,且在三角形p234内,不管怎么调整,p1也不会到边缘上去
  • 打赏
  • 举报
回复
引用 8 楼 happy__888 的回复:
还有个简单的办法 计算四个顶点相对你的相机位置的二维球面角参数(cita, phi) 计算得到角度后,就变成了平面的四个顶点,用一个矩形框住它的问题了 简单的办法用轴向矩形, 更准确的用可倾斜的矩形(倾斜角度就是你的相机up向量的倾斜角度) 让相机看向这个矩形的中心(未必是四个顶点的世界坐标中心点了),矩形长短轴就是你的相机边界了
呵呵呵,我菜鸟一只,数学很差啊!高中水平。阁下别吓着我了。 我正在用您三楼提供的方法去实现,但仍很感谢你提供的新思路!还有一个问题,阁下可看下 http://bbs.csdn.net/topics/390458681
  • 打赏
  • 举报
回复
改fov的确不是个好办法;我这也是无奈之举:我的空中相机还受其他东西制约,不可以自由移动,所以我只好先按它不动的思路去找解决办法了。
寻开心 2013-05-14
  • 打赏
  • 举报
回复
还有个简单的办法 计算四个顶点相对你的相机位置的二维球面角参数(cita, phi) 计算得到角度后,就变成了平面的四个顶点,用一个矩形框住它的问题了 简单的办法用轴向矩形, 更准确的用可倾斜的矩形(倾斜角度就是你的相机up向量的倾斜角度) 让相机看向这个矩形的中心(未必是四个顶点的世界坐标中心点了),矩形长短轴就是你的相机边界了
RFbenson 2013-05-13
  • 打赏
  • 举报
回复
如楼上: 先算modelview矩阵。 定义投影平面,四个点的平面和摄像机到中心点作为法线。 camera position:fixed camera direction:用中心点算 ZNear:自定义 ZFar :自定义 Aspect:根据四个点距离算 FOV:四个边的宽高比 再算MVP。
寻开心 2013-05-13
  • 打赏
  • 举报
回复
简单的算法 计算4个顶点的中心点, 让相机看向这个点, 根据这个点和视线方向生成一个空间平面,计算四个点在平面上的投影,剩下的就是计算fov角度的问题,让他能覆盖所有的四个顶点了 理论上不一定完全有解的,比如三个点位于相机前面,一个点位于相机后面 因为楼主假定4个点位于地面,相机位于空中,如果相机高出所有的顶点的话,应该是有解得
  • 打赏
  • 举报
回复
相机位置不变,活动目标位置改变,相机必定会跟着旋转的。
ctownboy 2013-05-13
  • 打赏
  • 举报
回复
既然相机位置固定,又注视四个点的中心点,那Position和Direction都是知道了,自己再求一下Up,就可以用OpenGL或者D3D的LookAt函数求出View矩阵啦,Up可以用Direction叉乘世界的朝上轴,求出Camera的Right,再用Right叉乘Direction,就是Up了。 我以前也做过类似的东西,不过我是改相机位置的,我觉得改FOV效果不好看,两个点距离特别远的话,一下就把FOV拉太大了,畸变就太严重了,还不如只移动相机把四个点都罩住效果好
  • 打赏
  • 举报
回复
引用 4 楼 RFbenson 的回复:
先算modelview矩阵。 定义投影平面,四个点的平面和摄像机到中心点作为法线。
这一句没看懂。
引用 4 楼 RFbenson 的回复:
Aspect:根据四个点距离算 FOV:四个边的宽高比
是不是还有必要算边界框?毕竟投影面是矩形的。 谢谢!
引用 3 楼 happy__888 的回复:
如果相机高出所有的顶点的话,应该是有解得
我想是这样的,有解就好!
引用 3 楼 happy__888 的回复:
计算4个顶点的中心点, 让相机看向这个点, 根据这个点和视线方向生成一个空间平面,计算四个点在平面上的投影
这一步应当是关键了。四个顶点的中心点作为相机的注视点,感觉上并不精确; “四个点在平面上的投影”具体怎样算还不知道。数学太差,还请楼上指导!谢谢!
ctownboy 2013-05-12
  • 打赏
  • 举报
回复
两步怎么依赖了?Camera不动的话,View矩阵是不变的,位置朝向肯定是你预先设置好的或者第一帧就算好了再也不改了

8,304

社区成员

发帖
与我相关
我的任务
社区描述
游戏开发相关内容讨论专区
社区管理员
  • 游戏开发
  • 呆呆敲代码的小Y
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧