c++ - 如何进行腿部运动,OpenGL?

标签 c++ opengl

当我尝试围绕一个枢轴点(腿的顶部)进行腿部运动时,实际发生的是腿部开始围绕错误的点旋转,而我只想让腿部来回摆动。

我该如何解决这个问题?

这是我的代码。

glPushMatrix();

    glTranslatef(x+0.0f, y+6.0f, z-1.5f);
    glRotatef(walk, 1.0f,0.0f,0.0f);
    glBegin(GL_QUADS);
        glTexCoord2f(0.5f,0.0f); glVertex3f(x-1.0f, y-6.0f, z-3.0f);
        glTexCoord2f(1.0f,0.0f); glVertex3f(x-1.0f, y-6.0f, z-0.5f);
        glTexCoord2f(1.0f,0.5f); glVertex3f(x-1.0f, y-18.0f, z-0.5f);
        glTexCoord2f(0.5f,0.5f); glVertex3f(x-1.0f, y-18.0f, z-3.0f);

        glTexCoord2f(0.5f,0.0f); glVertex3f(x+1.0f, y-6.0f, z-3.0f);
        glTexCoord2f(1.0f,0.0f); glVertex3f(x+1.0f, y-6.0f, z-0.5f);
        glTexCoord2f(1.0f,0.5f); glVertex3f(x+1.0f, y-18.0f, z-0.5f);
        glTexCoord2f(0.5f,0.5f); glVertex3f(x+1.0f, y-18.0f, z-3.0f);

        glTexCoord2f(0.5f,0.0f); glVertex3f(x-1.0f, y-6.0f, z-3.0f);
        glTexCoord2f(1.0f,0.0f); glVertex3f(x+1.0f, y-6.0f, z-3.0f);
        glTexCoord2f(1.0f,0.5f); glVertex3f(x+1.0f, y-18.0f, z-3.0f);
        glTexCoord2f(0.5f,0.5f); glVertex3f(x-1.0f, y-18.0f, z-3.0f);

        glTexCoord2f(0.5f,0.0f); glVertex3f(x-1.0f, y-6.0f, z-0.5f);
        glTexCoord2f(1.0f,0.0f); glVertex3f(x+1.0f, y-6.0f, z-0.5f);
        glTexCoord2f(1.0f,0.5f); glVertex3f(x+1.0f, y-18.0f, z-0.5f);
        glTexCoord2f(0.5f,0.5f); glVertex3f(x-1.0f, y-18.0f, z-0.5f);
glEnd();
glPopMatrix();
glPushMatrix();
    glTranslatef(x+0.0f, y+6.0f, z+1.5f);
    glRotatef(-walk, 0.0f,0.0f,1.0f);
    glBegin(GL_QUADS);
        glTexCoord2f(0.5f,0.0f); glVertex3f(x-1.0f, y-6.0f, z+3.0f);
        glTexCoord2f(1.0f,0.0f); glVertex3f(x-1.0f, y-6.0f, z+0.5f);
        glTexCoord2f(1.0f,0.5f); glVertex3f(x-1.0f, y-18.0f, z+0.5f);
        glTexCoord2f(0.5f,0.5f); glVertex3f(x-1.0f, y-18.0f, z+3.0f);

        glTexCoord2f(0.5f,0.0f); glVertex3f(x+1.0f, y-6.0f, z+3.0f);
        glTexCoord2f(1.0f,0.0f); glVertex3f(x+1.0f, y-6.0f, z+0.5f);
        glTexCoord2f(1.0f,0.5f); glVertex3f(x+1.0f, y-18.0f, z+0.5f);
        glTexCoord2f(0.5f,0.5f); glVertex3f(x+1.0f, y-18.0f, z+3.0f);

        glTexCoord2f(0.5f,0.0f); glVertex3f(x-1.0f, y-6.0f, z+3.0f);
        glTexCoord2f(1.0f,0.0f); glVertex3f(x+1.0f, y-6.0f, z+3.0f);
        glTexCoord2f(1.0f,0.5f); glVertex3f(x+1.0f, y-18.0f, z+3.0f);
        glTexCoord2f(0.5f,0.5f); glVertex3f(x-1.0f, y-18.0f, z+3.0f);

        glTexCoord2f(0.5f,0.0f); glVertex3f(x-1.0f, y-6.0f, z+0.5f);
        glTexCoord2f(1.0f,0.0f); glVertex3f(x+1.0f, y-6.0f, z+0.5f);
        glTexCoord2f(1.0f,0.5f); glVertex3f(x+1.0f, y-18.0f, z+0.5f);
        glTexCoord2f(0.5f,0.5f); glVertex3f(x-1.0f, y-18.0f, z+0.5f);
glEnd();

glPopMatrix();

最佳答案

所有 OpenGL 旋转都是围绕点 (0, 0, 0) 完成的。所以如果你想围绕特定点 (rx, ry, rz) 旋转一个顶点,你必须做以下转换:

Translate(-rx, -ry, -rz);
Rotate(alpha, beta, gamma);
Translate(rx, ry, rz);

关于c++ - 如何进行腿部运动,OpenGL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10082900/

相关文章:

c++ - 使用 clocks_per_sec 计算过剩帧率太慢

c++ - 在 Visual Studio C++ 中创建应用程序图标的最佳方式

c++ - 剥离使可执行文件膨胀的未使用的运行时函数 (GCC)

c++ - 有没有办法在 Eigen (C++) 中存储阈值操作输出?

c++ - 可移植内存搜索功能的返回类型

c++ - wxTextCtrl 类的 GetValue 方法使我的应用程序崩溃

java - 使用 OpenGL/LWJGL 通过 glDrawArrays 绘制 VBO 时出现问题

c++ - 按住键盘输入时犹豫?

linux - 没有 GUI 的 OpenGL

opengl - 透视除法后的 Z 值始终小于 -1