图形编程技术_ 变换的秘密_
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Transformation(变换)
几何变换投影变换裁剪视口变换
三维模型 二维图形
远平面
投影平面 投影窗口
近平面 视点Biblioteka 窗口视口屏幕
Transformation process
三维几何变换
glTranslate*( ) glRotate*( ) glScale*( )
投影
glFrustum( ) gluPerspective( ) glOrtho( )
glMatrixMode(GL_MODELVIEW)
两者其实是一回事。 为简单起见,你暂时可以认为视点总是不变的,所有变换 都是模型变换
NateRobin的演示程序
gluLookAt( )
void gluLookAt( eyex, eyey, eyez, centerx, centery, centerz, upx, upy, upz );
本质上其实是一样的,gluLookAt()还是只是计算出了 一个变换矩阵而已。
图形编程 技术 北京林业大学
杨刚//Yanggang@
投影变换
变换的秘密
变换的四个步骤及其相关的OpenGL函数 看起来简单,变起来烦-----几何变换 定义一个视域空间-----投影变换函数的参数 为什么图像变形了?-----视口变换 三维几何空间中的单位是什么?
x′ 1 0 0 ∆xx
y′
=
0
1
0
∆y y
z′ 0 0 1 ∆z z
1
0 0 0
1 1
x′ cosα − sinα 0 0x
y′
=
sin
α
cosα
0 0 y
z′ 0
0 1 0 z
1
0
0 0 11
x ' Sx 0 0 0 x
y
'
=
0
Sy
0
0
y
z ' 0 0 Sz 0 z
投影( Projection )
Perspective projection (透视投影) Parallel projection (平行投影) Orthographic projection (正投影)
投影点
投影方向2
投影变换:给定视点、视线方向,计算出当前 顶点的投影点坐标。
投影变换(Project Transformation)
图元p1、p2 都经过了变换T1、T2…..Tn:
glLoadIdentity();
Transformation T1;
• • • Transformation Tn;
Primitive p1;
Primitive p2;
M = I; M = I * T1 * T2 * ……Tn;
矩阵的组合应用
p1 经过变换T1, T2; p2 经过变换T3, T4;
z
B
x′
x
y′ = M y
z′
z
变换的组合就是矩阵相乘
当前模型变换矩阵:M
glTranslatef(…….)
T1
M’ = M * T1
glRotatef(…….)
T2
M’’ = M’ * T2
作用于点 p(x, y, z, w) M’’ * p = (M * T1 * T2) * p
矩阵的组合应用
NateRobin的演示程序Light Position
gluLookAt( )
glTranslate(), glRotate(), glScale()都可理解为视点不动, 变换物体----Model transformation
而gluLookAt()试图模拟一种物体不动,变换视点的控 制效果----View transformation
窗口裁剪
???
视口变换
glFrustum( ) gluPerspective( ) glOrtho( )
glViewport( )
图形编程 技术 北京林业大学
杨刚//Yanggang@
平移、旋转、缩放 -----都是矩阵
平移、旋转、缩放-----都是矩阵
glTranslate*( ); glRotate*( ); glScale*( )
图形编程 技术 北京林业大学
杨刚//Yanggang@
第3章
变换的秘密
本章内容
• 变换的四个步骤及其相关的OpenGL函数 • 看起来简单,变起来烦-----几何变换 • 定义一个视域空间-----投影变换函数的参数 • 为什么图像变形了?-----视口变换 • 三维几何空间中的单位是什么?
glLoadIdentity(); Transformation T1; Transformation T2; Primitive p1;
glLoadIdentity(); Transformation T3; Transformation T4; Primitive p2;
M = I; M = I * T1 * T2; M = I; M = I * T1 * T2;
void glFrustum(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble near, GLdouble far);
void gluPerspective( GLdouble fovy, GLdouble aspect, GLdouble zNear, GLdouble zFar );
图形编程 技术 北京林业大学
杨刚//Yanggang@
模型变换与视点 变换
模型变换与视点变换 Model-View Transformation
Model transformation----视点不变,变物体 View transformation ----物体不变,变视点
变换的四个步骤及其 相关的OpenGL函数
图形流水线
CPU GPU
Vertex operations
Rasterization
变换 (Transformation) 几何变换 投影 裁剪 视口变换
Texture
Fragment operations
Frame buffer
2D image in screen
1
0
0
0
1
1
为什么 要把各种变换 表示成矩阵运算
的形式?
连续变换的矩阵可以组合成一个矩阵
x′ sx 0 0 x
y
′
=
0
sy
0
y
z′ 0 0 sz z
x′ cosα
y′
=
sin α
z′ 0
− sinα cosα
0
0 x 0 y 1 z
x′ y′ = z′
A
x
B A y 令M = BA,