繁体   English   中英

3d相机位置给出一些点

[英]3d Camera Position given some points

Heyo,

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

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

注意:这是使用OpenGL。

澄清:相机应该在运动中的角色“前方”,而不是在上方。

它也将沿地平面移动。

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

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

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

对于任何方向的相机,这将在3D中工作。

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

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

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

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

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM