gluLookAt函数

来源:互联网 发布:js阻止表单提交 编辑:程序博客网 时间:2024/06/08 09:26

1)原理:将世界坐标系中的物体位置,描述为摄像机坐标系下的物体位置。

也就是世界坐标系原点坐标轴三个向量,变换到摄像机坐标系三个坐标轴向量,可以对物体进行这样的变换可能包含了缩放->旋转->平移,然后取逆变换得到该摄像机视图变换矩阵。
因为OGL中是列式矩阵,所以矩阵乘法顺序本来是:T^-1 * M^-1变为:M^-1*T^-1。
glMultMatrixf(M);glTranslated(-eyex, -eyey, -eyez);
2)应用注意:OGL中还要注意,因为采用的是矩阵堆栈变换,模型变换可以默认提供glLoadIdentity ()。
其它变换都要先将当前矩阵初始化为:glLoadIdentity ()
然后进行: 
gluLookAt (0.0, 0.0, 5.0, 0.0, 0.0, 0.0, 0.0, -1.0, 0.0);或gluPerspective(60.0, 1, 1.5, 20.0);变换设置。

Name

gluLookAt — define a viewing transformation

C Specification

void gluLookAt(GLdouble eyeX, GLdouble eyeY, GLdouble eyeZ, GLdouble centerX, GLdouble centerY, GLdouble centerZ, GLdouble upX, GLdouble upY, GLdouble upZ);
 

Parameters

eyeXeyeYeyeZ

Specifies the position of the eye point.

centerXcenterYcenterZ

Specifies the position of the reference point.

upXupYupZ

Specifies the direction of the up vector.

Description

gluLookAt creates a viewing matrix derived from an eye point, a reference point indicating the center of the scene, and an UP vector.

The matrix maps the reference point to the negative z axis and the eye point to the origin. When a typical projection matrix is used, the center of the scene therefore maps to the center of the viewport. Similarly, the direction described by the UP vector projected onto the viewing plane is mapped to the positive y axis so that it points upward in the viewport. The UP vector must not be parallel to the line of sight from the eye point to the reference point.

Let

F = centerX - eyeX centerY - eyeY centerZ - eyeZ

Let UP be the vector upX upY upZ .

Then normalize as follows:

f = F F

UP ″ = UP UP

Finally, let s = f × UP ″ , and u = s s × f .

M is then constructed as follows:

M = s ⁡ 0 s ⁡ 1 s ⁡ 2 0 u ⁡ 0 u ⁡ 1 u ⁡ 2 0 - f ⁡ 0 - f ⁡ 1 - f ⁡ 2 0 0 0 0 1

and gluLookAt is equivalent to

glMultMatrixf(M);glTranslated(-eyex, -eyey, -eyez);            

See Also

gluPerspectiveglFrustum

Copyright

Copyright © 1991-2006 Silicon Graphics, Inc. This document is licensed under the SGI Free Software B License. For details, see http://oss.sgi.com/projects/FreeB/.

0 0