问题描述
我目前正试图绕着我创建的迷宫的外围飞行。这是我调用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 (将#修改为@)