【发布时间】:2014-08-20 16:37:03
【问题描述】:
我有一个几何图形,其顶点位于笛卡尔坐标中。这些笛卡尔坐标是 ECEF(地心地球固定)坐标。这种几何实际上存在于使用 wgs84 坐标的地球椭球模型上。笛卡尔坐标实际上是通过转换几何所在的纬度和经度集获得的,但我不再可以访问它们。我所拥有的是通过解析笛卡尔坐标获得的具有 xmax、ymax、zmax 和 xmin、ymin、zmin 的轴对齐边界框(在 xmax、ymax、zmax 或 xmin、ymin、zmin 处显然没有几何的笛卡尔点.边界框只是一个包围几何体的长方体)。
我想要做的是在概览模式下计算相机距离,使这个几何体的边界框完全适合相机平截头体。
我不太清楚这里采取的方法。想到了使用本地到世界矩阵之类的方法,但不是很清楚。
@Specktre 我参考了您关于在 3D 中移动点的建议,这使我找到了另一个改进的解决方案,但并不完美。
- 计算一个可以从 ECEF 传输到 ENU 的矩阵。参考这个 - http://www.navipedia.net/index.php/Transformations_between_ECEF_and_ENU_coordinates
- 使用此矩阵旋转原始边界框的所有八个角。
- 通过查找这些旋转点的 x、y、z 的最小值和最大值来计算新的边界框
- 计算距离
cameraDistance1 = ((newbb.ymax - newbb.ymin)/2)/tan(fov/2)cameraDistance2 = ((newbb.xmax - newbb.xmin)/2)/(tan(fov/2)xaspectRatio)cameraDistance = max(cameraDistance1, cameraDistance2)
这一次我必须使用沿 x 的纵横比,正如我之前预期的那样,因为在我的应用程序中 fov 沿 y。尽管这几乎可以正常工作,但我猜仍然存在一个小错误。我不太确定生成一个新的边界框是否是个好主意。在原始边界框中识别2个点point1(xmax,ymin,zmax)和point(xmax,ymax,zmax)可能更准确,与矩阵相乘后找到它们的值然后做(point2 - point1).length ()。同样对于 y。那会更准确吗?
【问题讨论】:
标签: opengl math graphics coordinate-systems