gluLookAt 问题 - 如何使曲线运动?

Posted

技术标签:

【中文标题】gluLookAt 问题 - 如何使曲线运动?【英文标题】:gluLookAt issues - how to make a curve like movement? 【发布时间】:2020-05-16 22:12:21 【问题描述】:

所以基本上,通过使用左、右、上和下键,我需要实现this animation,可能使用gluLookAt

我已经尝试了所有方法,但我无法让它完全像这样移动。你有什么建议吗?这是我当前的相机移动功能。

void specialKeys(int key, int x, int y) 
    switch (key) 
        case GLUT_KEY_DOWN:
            ex -= 0.04;
            break;
        case GLUT_KEY_UP:
            ex += 0.04;
            break;
        case GLUT_KEY_LEFT:
            ey += 0.05;
            cy -= 0.05;
            std::cout << ex << " " << cx << " " << uy << std::endl;
            break;
        case GLUT_KEY_RIGHT:
            ey -= 0.05;
            cy += 0.05;
            std::cout << ex << " " << cx << " " << uy << std::endl;
            break;
        default:
            break;
        
    glutPostRedisplay();

其余代码可以在前面的问题Why does my wired sphere turn into ellipsoid when translating and changing camera angle?和Issues with animation - translation, projection OpenGL/C++中找到。

我的gluLookAt 是:

gluLookAt(ex + 0.0, ey + 0.0, ez*ex - 5.5, cx, cy, -1.0 + cz, -1.0, 0.0, 0.0);

不知何故,当元素向右翻译时,我的向上和向下键没有做他们应该做的事情。我认为我走在正确的道路上,但我已经为此工作了两天,但无法解决它。

【问题讨论】:

参考动画也包含相机移动,不是吗? 我相信确实如此,但我们没有得到任何具体说明,只有这个 gif 来复制它。 【参考方案1】:

视图的目标似乎不在圆环的中心。它似乎在对称轴上,但在圆环的前面。因此gluLookAt 的参数centerZ 取决于ez。例如:

gluLookAt(ex, ey, ez, 0.0, 0.0, ez-1.0, 0.0, 1.0, 0.0);

【讨论】:

它有点像示例,但我仍然无法让它完全像在 gif 上那样移动。我放弃了,不管我怎么做,都没有用。它只是不会做出动画在 gif 上的那些微小动作。无论如何,感谢您的帮助,非常感谢,我学到了一些新东西。

以上是关于gluLookAt 问题 - 如何使曲线运动?的主要内容,如果未能解决你的问题,请参考以下文章

如何跟踪触摸时的手指运动以绘制平滑曲线?

伺服电机的曲线运动

[求助]wp中如何使用路径动画,让一个控件沿着曲线或正弦曲线运动

MATLAB画三维空间小球沿给定轨迹曲线运动~

javascript运动系列第三篇——曲线运动

小球沿贝塞尔二阶曲线的运动