OpenGL:当应用我自己的 lookAt 函数时,屏幕是空白的
OpenGL: When applying my own lookAt function the screen is blank
我正在编写我自己的 gluLookAt 版本。我相信我有正确的实现,但是返回的矩阵通常充满了 nan。
这是我的函数:
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;
}
我目前正在尝试查看我制作的立方体的顶部。立方体为 1x1x1,以原点为中心。我像这样设置 model_view:
vec4 e = {0, 1, 0, 1};
vec4 a = {0, 0, 0, 0};
vec4 u = {0, 0, 1, 0};
model_view = look_at(e, a, u);
我相信我的参数是正确的。我想从y=1往下看原点。
问题似乎出在我的职能上吗?还是我误解了参数?
轴向量 u
、v
和 p
的第四个分量必须为零。在您的情况下,vpn
的第四个分量不为零,因为 eye
是 {0, 1, 0, 1}
.
我建议使用 vec3
而不是 vec4
来计算 u
、v
和 p
。但是,您可以通过设置 vpn[3] = 0
:
来解决问题
vec4 vpn = vec4_sub(eye, at);
vpn[3] = 0
我正在编写我自己的 gluLookAt 版本。我相信我有正确的实现,但是返回的矩阵通常充满了 nan。
这是我的函数:
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;
}
我目前正在尝试查看我制作的立方体的顶部。立方体为 1x1x1,以原点为中心。我像这样设置 model_view:
vec4 e = {0, 1, 0, 1};
vec4 a = {0, 0, 0, 0};
vec4 u = {0, 0, 1, 0};
model_view = look_at(e, a, u);
我相信我的参数是正确的。我想从y=1往下看原点。 问题似乎出在我的职能上吗?还是我误解了参数?
轴向量 u
、v
和 p
的第四个分量必须为零。在您的情况下,vpn
的第四个分量不为零,因为 eye
是 {0, 1, 0, 1}
.
我建议使用 vec3
而不是 vec4
来计算 u
、v
和 p
。但是,您可以通过设置 vpn[3] = 0
:
vec4 vpn = vec4_sub(eye, at);
vpn[3] = 0