我有一组2D到3D点对应关系,我从这些对应关系估计仿射相机矩阵(基本上,假设是正交投影)[1]。相机估计的输出是3x4
矩阵,其中第三行是[0, 0, 0, 1]
(“仿射约束”)。
现在从这个相机矩阵,我想用OpenGL渲染我的模型。所以从本质上讲,从我的相机矩阵中创建一个ModelView
和一个(正交)Projection
矩阵。
我已经阅读了关于相机矩阵解剖/分解的材料数小时,但所有这些都是关于透视相机,而且由于我的矩阵中缺少“z”信息,我无法申请这些技巧。
我尝试了很多尝试,其中大部分都是在很早的阶段就失败了。我试过的一件事是取矩阵的第一行和第二行的点积(当然没有最后一列)来创建一个转换z
的新行,但它只是[0, 0, 1]
,其中一个当然有道理。
我尝试的另一件事是在估计相机矩阵之前将我的2D点转换为剪辑坐标空间(即“反转”窗口变换),因此我可以进行窗口变换并翻转y(在我的屏幕空间中,原点位于上部(左)出图片。
我坦率地谈到如何从根本上解决这个问题。
[1]:用于估计从世界到图像对应的仿射相机矩阵的黄金标准算法,多视图几何中的算法7.2,Hartley& Zisserman,第2版,2003年。
答案 0 :(得分:0)
仿射相机(参见例如here)仅进行正投影,然后进行仿射变形。
鉴于人们总是可以使用OpenGL正交相机作为任意图像转换的光栅化设备,仿制相机可以仿真如下:
如果性能问题,可以优化此序列。继续阅读"渲染到纹理"如何。