如何在opengl中计算给定3D点及其2D屏幕位置的投影/模型视图矩阵

Posted

技术标签:

【中文标题】如何在opengl中计算给定3D点及其2D屏幕位置的投影/模型视图矩阵【英文标题】:how to compute the projection/modelview matrix given 3D points and their 2D screen positions in opengl 【发布时间】:2013-11-20 07:20:51 【问题描述】:

关于 opengl 中的模型视图/投影矩阵,我遇到了一个棘手的问题。

说,我有一组 3D 点,以及它们对应的 2D 屏幕位置,是否可以求解将所有这些 3D 点转换为 2D 屏幕的最佳模型视图(或缩放/旋转/平移)矩阵当投影矩阵固定时,最小二乘意义上的位置?或者,当模型视图矩阵固定时,是否可以求解这样的投影矩阵?是否可以在gluperspective、gluLookAt等函数中获取参数设置?

【问题讨论】:

我猜你没有二维屏幕位置的深度值? 基本上,答案是“是”。但是,有些东西(如统一比例因子)不会影响图像,因此您无法从 2D 屏幕位置获取它们。 @NicoSchertler 是的,我只是假设 2D 屏幕点的深度值为 0。有了这样的 2D 屏幕点和它们对应的 3D 点的位置,是否有可能得到这样的模型视图矩阵?还是我应该计算投影矩阵? @comingstorm 如果我修复比例因子会怎样? 3D点的位置及其对应的2D屏幕点(假设其深度值为0),是否有可能得到一个最优的变换矩阵? 是的,您需要修复无法派生的元素。基本上,您的最小二乘求解器无论如何都需要强制执行某些约束(例如,确保旋转矩阵是旋转矩阵)。您可以通过添加额外的约束来修复诸如比例因子之类的问题,以便得到明确定义的约束最小二乘问题。 【参考方案1】:

是的,如果你有足够的积分是可能的。

已经有图书馆可以做到这一点,请查看http://docs.opencv.org/modules/calib3d/doc/camera_calibration_and_3d_reconstruction.html

【讨论】:

以上是关于如何在opengl中计算给定3D点及其2D屏幕位置的投影/模型视图矩阵的主要内容,如果未能解决你的问题,请参考以下文章

计算给定 3 个点及其相对位置的平面的 3D 旋转

OpenGL工作流程

OpenGL获取像素的原始3d坐标

使用正交矩阵将 3D 坐标转换为 2D 屏幕坐标

OPENGL若干重要基础概念

Opengl:2d HUD 超过 3D