[英]OpenGL ES - get 2D pixel coordinate from camera position
我正在使用OpenGL ES(IOS)和OpenCV。 我想知道是否可以从GLKMatrix4相机位置获取2D像素坐标吗?
确实,我在OpenGL中显示了一个特定的3D对象,该对象只有它的大小和它的相机姿势,我想将其转换为OpenCV参考坐标,即2D像素。
更准确地说,我有一个IOS应用程序,并且可以传输相机颜色。 此流与OpenGL一起显示在我的Ipad上。 在此显示器上,我有一个特定的叠加层,即3D对象。 同时,我对OpenCV进行了一些检测。 现在,我要通过3D对象将帧中的OpenCV(这是一个矩形绘制)与OpenCV关联起来,但是对于这个对象,我只有其摄像机位置和大小。
我知道4x4照相机姿势的内容,但是没有找到有关如何将其转换为2D坐标的任何信息。
简而言之:输入:一个2D矩形(仅获取2D坐标)和一个3D对象(仅获取其相机位置)
有办法吗? 请你帮助我好吗 ?
谢谢
要获得向量在屏幕上的投影,只需要将其乘以openGL中使用的矩阵即可。 第三个坐标被简单地丢弃,仅用于深度缓冲区(还有插值,但这在这里实际上并不重要)。
在openGL中,您将通过将其与矩阵相乘得到的绘制像素的坐标将被标准化为所有轴上[-1,1]
范围内的坐标系。 这意味着位于屏幕/视图最左上角的像素将具有坐标(-1,1)
,右上角(1,1)
,中心(0,0)
...现在对应于缓冲区像素,此值必须反规范化:
您需要具有缓冲区的width
和height
以便像素位置为bufferX = ((x+1)/2.0) * width
和bufferY = ((y+1)/2.0) * height
。 结果是浮动值,因此您需要将它们四舍五入为整数或进行类型转换。 我不知道这是由openGL完成的。
既然你已经使用GLKit类型和数学,试着功能GLKMathProject
从3D模型空间转换到视口(窗口/像素2D)空间, GLKMathUnproject
如果你还需要周围的其他方法。 您将需要(大概)传递给着色器的(相同)模型视图和投影矩阵,以绘制场景。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.