带有 gluLookAt 的 FPS 武器

Posted

技术标签:

【中文标题】带有 gluLookAt 的 FPS 武器【英文标题】:FPS weapon with gluLookAt 【发布时间】:2014-03-22 17:19:05 【问题描述】:

我正在开发一个类似 3D 迷宫的游戏,只是为了学习(当然也是为了好玩 :))。我已经做了迷宫,我可以在第一人称模式下在墙壁之间移动。我唯一的问题是,我想要某种武器用于我的第一人称视角(比如 FPS 游戏)。为了在迷宫中移动,我使用gluLookAt。 代码sn-ps:

void RenderScene(void)

    glLoadIdentity();    
    gluLookAt(x, 1.0f, z,x + lx, 1.0f, z + lz,0.0f, 1.0f, 0.0f);

....

     glBindTexture(GL_TEXTURE_2D, texture[0]); //texture binding
            glScalef(7.0f, 8.0f, 7.0f);
            glTranslatef(-(r * 2), 0.0f, -(c * 2)); //place the maze walls(cubes)
            glCallList(mazeListId);//using the display list



    void SpecialKeys(int key, int xx, int yy)

    // ...
    int state;
    float fraction = 1.0f;


    switch (key) 
    case GLUT_KEY_LEFT:
        angle -= 0.15f;
        lx = sin(angle);
        lz = -cos(angle);
        break;
    case GLUT_KEY_RIGHT:
        angle += 0.15f;
        lx = sin(angle);
        lz = -cos(angle);
        break;
    case GLUT_KEY_UP:
        x += lx * fraction;
        z += lz * fraction;
        break;
    case GLUT_KEY_DOWN:
        x -= lx * fraction;
        z -= lz * fraction;
        break;
    

我已经尝试用我的立方体来做到这一点(立方体现在是“武器”)。

glPushMatrix();
glTranslatef(0.0f, 0.0f, 5.0f);
    glTranslatef(x + lx, -0.5f, z + lz);
    glRotatef(angle, 0.0f, 0.0f, 1.0f);
    drawCube(2);
    glPopMatrix();

有了这个,立方体可以完美地向前或向后移动,但是当我向左或向右转时,它会停留在它的位置。 有人可以帮我转吗?

【问题讨论】:

【参考方案1】:

终于,我解决了这个问题!我没有做出正确的转换顺序。我分享我的代码,如果将来有人需要它。

gluLookAt(x, 1.0f, z,
        x + lx, 1.0f, z + lz,
        0.0f, 1.0f, 0.0f);

    glPushMatrix();

    glTranslatef(x + lx, -0.5f, z + lz);
    glRotatef(-angle* 57.2957795, 0.0f, 1.0f, 0.0f); 
    glTranslatef(0.0f, 0.0f, 5.0f); // offset
    drawCube(2);
glPopMatrix();

【讨论】:

以上是关于带有 gluLookAt 的 FPS 武器的主要内容,如果未能解决你的问题,请参考以下文章

偏移 CFrame 数学

使用字符串 Unity 从游戏对象获取脚本

在 FPS 场景中理解 gluLookAt xyz 旋转的问题

UnityOnePieceFTG角色武器

UE4 角色拾取武器

武器效能评估系统