gluLookAt函数

gluLookAt函数用于定义视图变换,通过眼睛位置、场景中心点和向上向量创建视图矩阵。该矩阵将场景中心点映射到负z轴,眼睛位置映射到原点。向上向量在观察平面上的方向被映射到视口的正y轴,确保其朝上。函数要求向上向量不能与视线平行,避免定向问题。最后,通过特定的数学运算构建出视图矩阵。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

eyeX eyeY eyeZ

Specifies the position of the eye point.

centerX centerY centerZ

Specifies the position of the reference point.

upX upY upZ

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);
            

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/.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值