向上向量用于创建提供给 gluLookAt 的眼睛和中心向量之间的叉积。
从 iOS 上的 GLKit 标头中,您可以看到实现如下:
static __inline__ GLKMatrix4 GLKMatrix4MakeLookAt(float eyeX, float eyeY, float eyeZ, float centerX, float centerY, float centerZ, float upX, float upY, float upZ)
{
GLKVector3 ev = { eyeX, eyeY, eyeZ };
GLKVector3 cv = { centerX, centerY, centerZ };
GLKVector3 uv = { upX, upY, upZ };
GLKVector3 n = GLKVector3Normalize(GLKVector3Add(ev, GLKVector3Negate(cv)));
GLKVector3 u = GLKVector3Normalize(GLKVector3CrossProduct(uv, n));
GLKVector3 v = GLKVector3CrossProduct(n, u);
GLKMatrix4 m = { u.v[0], v.v[0], n.v[0], 0.0f,
u.v[1], v.v[1], n.v[1], 0.0f,
u.v[2], v.v[2], n.v[2], 0.0f,
GLKVector3DotProduct(GLKVector3Negate(u), ev),
GLKVector3DotProduct(GLKVector3Negate(v), ev),
GLKVector3DotProduct(GLKVector3Negate(n), ev),
1.0f };
return m;
}
这个问题中接受的答案如何正确使用 gluLookAt?很好地描述了向上向量的实际影响。
(gluLookAt 中“向上”向量背后的直觉很简单:看任何东西。现在将头倾斜 90 度。你在哪里没有改变,你正在看的方向没有改变,但是你的图像视网膜明显有。有什么区别?你的头顶指向的地方。那是向上的向量。)