在 OpenGL 中,给定两个相机位置(即模型 View 矩阵),我希望在它们之间平滑过渡。也就是说,我想在两个模型 View 矩阵之间进行插值。我见过很多讨论使用 SLERP 在两个旋转矩阵之间进行插值的资源,但对于相机位置,我们还有一个平移组件。 这样做是否像对 3x3 旋转矩阵使用 SLERP 并对模型 View 矩阵的 3x1 平移组件使用 LERP 一样简单?我的直觉告诉我,事情可能没这么简单,因为 3x1 平移组件不是相机的世界空间位置,对吗?
如果我有每个相机位置的实际世界位置,我想我可以将这些步骤分解为两个 OpenGL 命令:
glMultMatrix(newRotation); // rotation using SLERP
glMultMatrix(newTranslation); // translation using LERP
如果我理解正确的话,这里的newTranslation与模型 View 矩阵的3x1平移分量并不相同,而是相机的世界空间位置。
最佳答案
为什么不在相机位置/目标之间进行插值?
startPos = x
endPos = y
startTarget = xx
endTarget = yy
和update()
currentPos = interpolate(startPos, endPos, time_param);
currentTarget = interpolate(startTarget, endTarget, time_param);
camera_matrix = lookAt(currentPos, targetPos, upVector);
我认为这样控制相机移动更简单。
这里有更高级的插值方法:http://sol.gfxile.net/interpolation/
关于opengl - 在两个模型 View 矩阵之间进行插值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15856329/