opengl - 在两个模型 View 矩阵之间进行插值

标签 opengl rotation translation model-view linear-interpolation

在 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/

相关文章:

c++ - 优化此 OpenGL 渲染算法

c++ - glPushMatrix 停止所有旋转的发生

css - 可以使用 CSS 创建倾斜的列标签吗?

translation - 如何在 Magento 2 中安装语言包?

c++ - 在glsl中初始化全局变量?

c++ - 如何设置对象转换、属性?

c++ - OpenGL 着色器编译错误

java - 如何在 JavaFX 3D 中制作第一人称相机?

api - REST 风格的 API : How to handle translated textfields in representations?

ruby - 有没有一种简单的方法可以使用 Ruby 的 Socket 类通过原始套接字发送数据包?