如何解决OpenGL:应用我自己的lookAt函数时,屏幕为空白
我正在编写自己的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,1};
vec4 a = {0,0};
vec4 u = {0,0};
model_view = look_at(e,a,u);
我相信我的参数正确。我想看一下y = 1的原点。 问题似乎出在我的职务上吗?还是我误解了参数?
解决方法
轴向量u
,v
和p
的第四分量必须为零。在您的情况下,vpn
的第四部分不为零,因为eye
为{0,1,1}
。
我建议使用u
而不是v
来计算p
,vec3
和vec4
。但是,您可以通过设置vpn[3] = 0
来解决此问题:
vec4 vpn = vec4_sub(eye,at);
vpn[3] = 0
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。