方案
我有一个包含3D场景和“2D”场景的3D环境。
3D场景包含立方体和透视相机。
“2D”场景包含4个圆形物体和一个正交相机。这些圆形物体可以由用户移动,因此使用正交照相机,否则圆形物体可以“深度”移动(沿z轴)并且可以改变尺寸并且我希望它们保持尺寸。
根据圆形对象的定位,3D场景中立方体的角应与圆形对象的位置对齐。并保持观点。
编辑:
我想要实现的是:基于房间的图像,用户使用这些圆形物体来定义房间的尺寸。基于这些尺寸,隐藏的立方体被定位为充当boundery框。下一步是将三维物体添加到场景中并保持房间的视角
我尝试在图片中解释这个场景:
的问题
基本上我不知道从哪里开始。
由于正交相机,圆形物体处于“2D”环境中,因此我没有我认为需要的深度值。
我想我需要根据相机位置/设置进行一些透视转换?有各种各样的矩阵可以生产,但不知道如何实施它们。
我研究的来源
http://www.graphicsmill.com/docs/gm/affine-and-projective-transformations.htm
下面是类似的情况
https://math.stackexchange.com/questions/296794/finding-the-transform-matrix-from-4-projected-points-with-javascript
由于我的声誉,无法发布更多链接。
我希望有人能说清楚这一点或指出我正确的方向
答案 0 :(得分:0)
计算真正的自由度,我会说你没有足够的数据。想象一下3D场景的投影相机作为实际的针孔相机。然后,相机在其胶片,传感器或其他任何内容上创建的图像至少由9个参数描述:
另一方面,知道从一个平面到另一个平面的投影变换,例如,使用my answer来表示您已经引用的问题,只会产生8个具有几何意义的参数。因此,您无法希望从中重建相机位置,因此您无法找到适合您的标记的3D场景图像。关于3D pose estimation的维基百科文章写道
POSIT的大多数实现仅适用于非共面点(换句话说,它不能使用平面对象或平面)。 [3]
话虽如此,你举了一个例子,说明有人在这里做了什么!那他们怎么做呢?老实说,我不确定,但他们必须利用一些额外的知识或额外的假设。例如,如果他们知道他们的相机的细节(焦距,镜头和传感器之间的相对位置,或类似的东西),那么可以提供所需的数据。由于这些应用程序倾向于在移动设备上运行,我认为很可能他们可能有一个API来请求这些东西,或者一个数据库,可以在那里查找更常见的设备。
从你的问题来看,你没有这个。您也没有将立方体的所有垂直边缘垂直平行描绘,这可能是添加更多信息的另一种可能方式。您必须再提供一条信息才能获得有希望的独特解决方案。
当然,如果没有更多信息,系统就会被指定。不难发现任何转换矩阵,它可以满足您的要求。实际上the answer I references被置于一个设置中,其中2D到2D地图将使用3D变换矩阵建模。您也可以这样做并完成它。但是你的用户可能会感到沮丧,因为他们获得的转换可能会对平面外方向做出完全错误的事情,并且没有旋钮可以将其调整为正确的行为。