3d相机位置给出一些点

时间:2009-04-15 22:50:04

标签: opengl 3d 3dcamera

Heyo,

我目前正在开展一个项目,我需要放置相机,以便在不移动相机的情况下可以看到角色的完整动作。我有角色开始的位置,以及角色在所有三个方向(X,Y和Z)上行进的最大距离。我也有视野(90度)。

是否有一个方程式可以确定我需要放置相机的位置,以便不必移动以查看完整的运动?

注意:这是使用OpenGL。

澄清:相机应位于动作中的角色的“前方”,而不是上方。

它也将沿地平面移动。

4 个答案:

答案 0 :(得分:1)

如果你制作了点的边界球,你需要做的就是让相机保持一个大于或等于边界球/半径(FOV / 2)半径的距离。

例如,如果你有一个半径为Radius的边界球体和一个指定的视野FOV,你的相机只需要在“Dist”点,指向边界球体的中心。

计算距离的公式为: Dist = Radius / sin(FOV / 2);

这适用于3D,适用于任何方向的相机。

答案 1 :(得分:0)

从起点到终点获取线段。通过线段的中点构造与该线段正交的平面。然后将摄像机定位在此平面中的某个位置,距离平面和线的交叉点处的距离大于以下距离,以查看交叉点。摄像机的向上矢量必须在平面内,水平视场必须为90度。

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

此摄像机位置将在视口的左侧或右侧边框上具有起点和终点,并且以垂直居中为中心。

另一种解决方案可能是编写一个函数,该函数获取屏幕上两个点的起点,终点和所需位置。然后只需解决相机变换的投影方程。

答案 2 :(得分:0)

简单地具有(X,Y,Z)的最大范围本身并不足够,因为观察端口基本上是金字塔形的,金字塔的顶点位于眼睛位置。

为了论证,我们假设所有运动都在(X,Z)平面(即地面),眼睛沿着Y轴直接位于原点10m之上。

假设一个方形视口,在90°视野范围内,您可以沿X轴和Z轴从±10m处看到,但仅适用于地面上的物体(Y = 0)。一旦他们离开地面,你的视野就会减少。如果距离地面1米,那么你的(X,Z)范围只有±9米。

显然,无论如何都可以在场景中放置真正的相机,朝向任何方向。即使相机的“滚动”角度也可以改变可见的程度。实际上有无数的这样的摄像机点,所以你需要稍微限制你的标准。

答案 3 :(得分:0)

例如,这取决于物体是否会在一个平面内移动,你可以将相机放在一个限定其运动区域的球外(这取决于FOV为90,这是一个幸运的角度)。

如果物体要以3D移动,那就更困难了。如果您指定对象移动的区域(立方体与球......)以及您希望从中看到它的方向,这将有所帮助。