Heyo,

我目前工作的一个项目,我需要将相机放置在这样一个字符的全动会不移动相机可见。我在那里的字符开头的位置,以及该角色将在所有三个方向(X,Y,Z)移动的最大距离。我也有视场(这是90度)。

有没有会找出我需要放置摄像头,所以它不会要搬到看到完整的运动方程?

注意:这是使用OpenGL

澄清:相机应当是“前面”那在运动,而不是上面的字符的

这将也沿着接地平面中移动。

有帮助吗?

解决方案

如果使点的包围球,所有需要做的是保持相机在大于或等于边界球面/ SIN(FOV / 2)。

的半径的距离

例如,如果你有一个半径为半径的边界球,并查看FOV的指定字段,你的相机只是需要在一个点“DIST”走,向着包围球的中心点。

用于计算距离的等式为: DIST =半径/ SIN(FOV / 2);

这将在3D工作,用于照相机在任何取向。

其他提示

只要具有(X,Y,Z)的最大范围上没有其自身的足够的,因为观察口基本上是棱锥形的,具有金字塔处于眼睛的位置的顶点。

有关参数的缘故,让我们假定所有的移动是在(X,Z)平面(即,地),并且眼睛是直接沿Y轴的原点10米以上。

假设一个正方形视口,与90˚视野你能够从±沿X和Z轴的两个10米看到,但仅限于谁是在地面上(Y = 0)的对象。当他们来到离地面视图减少。如果它是1米地面那么你的(X,Z)的程度仅为±9米。

显然实际照相机可以无论如何在场景中放置,面向任何方向。即使是相机的“滚”角可以改变多少是可见的。实际上有无穷多个这样的摄像点,所以你需要在一定程度上限制了你的标准。

以从起始点到终点的线段。通过线段的中点建立一个平面垂直于该线段。然后在该平面以比从平面与直线的交点看交点下面更大的距离某处定位相机。摄像机的向上向量必须在平面与水平视场必须是90度。

distance = sqrt(dx^2 + dy^2 + dz^2) / 2

此摄像机位置都将具有起始点和在视口的左或右边界的端点和verticaly居中。

另一种解决方案可能是写一个函数,它的起始点,终点,和在屏幕上两个点的期望的位置。然后,只需求解照相机变换投影方程。

这取决于,例如,如果该对象是在一个平面上会移动,可以只将相机外的球包围它的移动区域(这取决于这样的事实,FOV是90,这是一个幸运角)。

如果该对象是3D会移动,这是困难得多。这将有助于如果该对象移动(立方体与球...)和方向要看到它从你指定的区域。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top