OpenGL:使用lookAt函数时,相机未按预期移动

问题描述

GIF of issue

我目前正试图绕着我创建的迷宫的外围飞行。这是我调用idle函数的lookAt函数的代码:

void idle()
{
    GLfloat angle_radian = D2R*angle;

    float eye_x = 10 * -1*cos(angle_radian);
    float eye_z = 10 * sin(angle_radian);

    vec4 eye = {eye_x,12,eye_z,0};
    vec4 at = {5,5,0};
    vec4 up = {0,1,0};

    model_view = look_at(eye,at,up);

    angle += 0.5;

    glutPostRedisplay();
}

相机正确地绕迷宫盘旋,但是,相机似乎也改变了旋转过程中向下看的角度。这使我感到困惑,因为我所看的位置的Y坐标没有改变(迷宫构造在y = 0平面上)。我相当确定lookAt函数的实现是正确的,但是如果我忽略了某些内容,则可以使用以下代码:

mat4 look_at(vec4 eye,vec4 at,vec4 up)
{
  vec4 vpn = vec4_sub(eye,at);
  vec4 n = vec4_norm(vpn);
  vec4 u = vec4_norm(vec4_cross(up,n));
  vec4 v = vec4_norm(vec4_cross(n,u));
  vec4 p = { eye.x,eye.y,eye.z,1 };

  mat4 m;
  m.x.x = u.x; m.y.x = u.y; m.z.x = u.z; m.w.x = u.w;
  m.x.y = v.x; m.y.y = v.y; m.z.y = v.z; m.w.y = v.w;
  m.x.z = n.x; m.y.z = n.y; m.z.z = n.z; m.w.z = n.w;
  m.x.w = p.x; m.y.w = p.y; m.z.w = p.z; m.w.w = p.w;

  mat4 m_t = mat4_trans(m);
  mat4 m_t_inv= mat4_inv(m_t);

  return m_t_inv;
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)