我的几何体的顶点在笛卡尔坐标系中。这些笛卡尔坐标是ECEF(地球中心地球固定)坐标。这种几何实际上是使用wgs84 corrdinates存在于地球的椭圆体模型上。笛卡尔坐标实际上是通过转换地理位置所依赖的纬度和经度集来获得的,但我不再能够访问它们。我所拥有的是一个轴对齐的边界框,其中xmax,ymax,zmax和xmin,ymin,zmin是通过解析笛卡尔坐标获得的(在xmax,ymax,zmax或xmin,ymin,zmin处几乎没有几何形状的笛卡尔点)边界框只是一个包围几何体的长方体。
我想要做的是在概览模式下计算相机距离,使得此几何体的边界框完全适合相机平截头体。
我不太清楚采取这种做法。我想到了一种使用局部到世界矩阵的方法,但不是很清楚。
@Specktre我提到了你在3D中转换点的建议,这使我得到了另一个改进的解决方案,但仍然不完美。
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)和点(xmax,ymax,zmax),在与矩阵相乘之后找到它们的值然后执行(point2-point1).length ()。同样的y。那会更准确吗?
答案 0 :(得分:0)
转换矩阵
相机矩阵
camera=inverse(camera_space_matrix)
Y=Z x (1,0,0)
,X = Z x Y
[注释]