我一直试图分析Apple的pARk(增强现实样本应用程序),我遇到了以下功能,
使用以下参数调用方法:
createProjectionMatrix(projectionTransform, 60.0f*DEGREES_TO_RADIANS, self.bounds.size.width*1.0f / self.bounds.size.height, 0.25f, 1000.0f);
void createProjectionMatrix(mat4f_t mout, float fovy, float aspect, float zNear, float zFar)
{
float f = 1.0f / tanf(fovy/2.0f);
mout[0] = f / aspect;
mout[1] = 0.0f;
mout[2] = 0.0f;
mout[3] = 0.0f;
mout[4] = 0.0f;
mout[5] = f;
mout[6] = 0.0f;
mout[7] = 0.0f;
mout[8] = 0.0f;
mout[9] = 0.0f;
mout[10] = (zFar+zNear) / (zNear-zFar);
mout[11] = -1.0f;
mout[12] = 0.0f;
mout[13] = 0.0f;
mout[14] = 2 * zFar * zNear / (zNear-zFar);
mout[15] = 0.0f;
}
我看到projection matrix
乘以rotation matrix
(由motionManager.deviceMotion API获取)。
投影矩阵的用途是什么?为什么它应该与旋转矩阵相乘?
multiplyMatrixAndMatrix(projectionCameraTransform, projectionTransform, cameraTransform);
为什么结果矩阵必须再次与PointOfInterest矢量坐标相乘?
multiplyMatrixAndVector(v, projectionCameraTransform, placesOfInterestCoordinates[i]);
在此感谢任何帮助。
示例代码link here
答案 0 :(得分:2)
在计算机视觉和机器人技术中,典型的任务是识别图像中的特定对象,并确定每个对象相对于某个坐标系的位置和方向(或平移和旋转)。
在增强现实中,我们通常会计算检测到的物体的姿势,然后在其上方增加虚拟模型。如果我们知道检测到的对象的姿势,我们可以更真实地投影虚拟模型。
关节旋转平移矩阵[R | t]被称为外部参数矩阵。它用于描述静态场景周围的相机运动,反之亦然,描述静止相机前方物体的刚性运动。也就是说,[R | t]将点(X,Y,Z)的坐标转换为相对于相机固定的坐标系。这为移动AR提供了6DOF姿势(3个旋转和3个翻译)。
如果您想阅读更多http://games.ianterrell.com/learn-the-basics-of-opengl-with-glkit-in-ios-5/
,请仔细阅读抱歉,我只使用Android AR。希望这会有所帮助:)