SLG游戏开发-U3D切镜头到指定建筑

SLG游戏中经常有“自动切换镜头”的需求,例如当前摄像机视角望向野外某个位置,现在需要快速切回都城的位置,那么摄像机要调整到哪呢?

 

如图所示,假设立方体是都城,摄像机是调整后的位置。

我们已知的信息是建筑的坐标摄像机当前的坐标摄像机的望向角度。求的是摄像机应该切换到的位置。 

假设摄像机最终的位置是(x, y, z),又因为游戏中摄像机的高度是不变的,也就是y不变,我们只需求出x和z值。

我们先来说旋转摄像机的意味着什么。所有的摄像机最初都是“规范化”状态,也就是说不旋转摄像机的情况下,摄像机永远望向z轴正方向。由上图可见,U3D是左手坐标系,于是摄像机初始状态是望向蓝色轴方向。

摄像机可以绕着3个轴分别旋转,对于参数里的x、y、z。在U3D中用3种颜色表示绕哪条轴旋转。

 

 

绕x轴旋转:即绕红轴旋转,或在蓝轴和绿轴组成的平面上旋转,可以想象成摄像机抬头/低头

绕y轴旋转:即绕绿轴旋转,或在蓝轴和红轴组成的平面上旋转,可以想象成摄像机左右摇头

绕z轴旋转:即绕蓝轴旋转,或在绿轴和红轴组成的平面上旋转,可以想象成摄像机歪头,或旋转摄像机本身

之所以绕z轴旋转这么特别,是因为规范化定义的是摄像机看向的是z轴。

旋转z轴,代表我们要歪着看世界,在SLG游戏中一般都不旋转z轴,也就是z值为0。

现在我们已知摄像机旋转的角度为(θx,θy,0),和摄像机的高度y,以及物体的位置(ox,0, oz),求摄像机的位置x和z。

我们分成2个三角函数来看,一个是垂直地面的三角形,夹角是θx;另一个是紧贴地面的三角形,夹角是θy - 180°(因为摄像机跟物体面对面,实际的夹角是摄像机的选择角度-180°)。

 

 如图所示,摄像机“低头”(旋转x轴)形成θx。由于红色线段的长度即是摄像机的高度y,可知绿色线段的长度为y/tan(rad(θx))。这时我们已经知道摄像机在地上的投影点到物体的距离为y/tan(rad(θx))。

 

如图所示,我们的目标为点P,由于知道了绿线的长度和“摇头”角度θy,可知橙线的长度为 y/tan(rad(θx))·sin(rad(θy-180°)),蓝线的长度为y/tan(rad(θx))·cos(rad(θy-180°))。

最终可知,摄像机的相对建筑位置是(y/tan(rad(θx))·sin(rad(θy - 180°)), y, y/tan(rad(θx))·cos(rad(θy)),再加上建筑的位置,即(ox + y/tan(rad(θx))·sin(rad(θy - 180°)), y, oz + y/tan(rad(θx))·cos(rad(θy))

-180°
posted @ 2022-05-04 19:09  银龙背上的骑士  阅读(222)  评论(0编辑  收藏  举报