Opengl 计算转换以在透视视图中获取边界框
这个问题并不完全取决于。相反,这是一个计算机图形学问题 给定包含球的场景的透视图,我们需要获得该球的边界框。请参见下面的示例图- 如果投射黄色球,则边界矩形可以由两个对角点Opengl 计算转换以在透视视图中获取边界框,opengl,3d,point-cloud-library,perspectivecamera,Opengl,3d,Point Cloud Library,Perspectivecamera,这个问题并不完全取决于。相反,这是一个计算机图形学问题 给定包含球的场景的透视图,我们需要获得该球的边界框。请参见下面的示例图- 如果投射黄色球,则边界矩形可以由两个对角点s1和s2定义。这些点的三维坐标由以下程序定义- 在中可视化点云 使用专门用于此视图的两个对角线点定义二维边界框,并使用回调函数获取点的三维坐标 通过比较对角线点定义最小和最大x,y坐标 根据实验设置定义最小和最大z坐标 根据上述程序,找到s1和s2的三维坐标,如下所示 Point s1: (0.774406, 0.2953
s1
和s2
定义。这些点的三维坐标由以下程序定义-
x
,y
坐标s1
和s2
的三维坐标,如下所示
Point s1: (0.774406, 0.295306, 2.703)
Point s2: ( 1.37865, 0.845276, 2.834)
通过比较s1
和s2
,定义并使用了一个框,但它不起作用。请参阅以下在不同相机角度拍摄的两个输出屏幕截图-
下面是代码片段-
double x_min = 0.774406, x_max = 1.37865;
double y_min = 0.295306, y_max = 0.845276;
double z_min = 0.2, z_max = 3.0;
pcl::visualization::PCLVisualizer viewer("Cloud Viewer");
viewer.setCameraParameters(camera);
viewer.addCube(x_min, x_max, y_min, y_max, z_min, z_max, 1, 0, 0, "bounding_box");
幸运的是,函数还有另一个定义,它提供了一种应用平移和旋转的方法
我的问题是,使用这两点,即s1
和s2
,以及如何定义变换,以便边界框包含球。
下面是下载项目运行所需的所有文件的链接-
相关性:PCL 1.8您需要在摄影机空间中重新计算边界框,方法是将球近似为一个椭球,该椭球由世界空间中的框s1、s2包围。如果不重新缩放,就无法直接变换(或“旋转”)长方体。@meowgoesthedog:非常感谢!(1)
computeViewMatrix
不起作用。(2) 对不起,我没有明白你的意思。如果看到,可以注意到球被s1
和s2
包围。但一旦我旋转了视角,现实就出现了。顺便说一下,我已经添加了s1
和s2
的二维和三维坐标。是的,我确实意识到computeViewMatrix
本身无法工作。s1、s2
在世界空间还是相机空间?如果他们在世界空间,没有理由不工作。如果是相机空间,那么您需要视图矩阵。@meowgoesthedog:是的s1
和s2
位于世界坐标系中。好吧,更清楚的是,我的总体目标是得到包围球的3D空间。然后我看不出为什么这不起作用-除非坐标不正确或者盒子过滤器的转换不是同一性。