我一直在尝试分析 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]);
感谢这里的任何帮助。
示例代码链接在这里