计算机图形学-OpenGL投影变换

合集下载

计算机图形学-变换

计算机图形学-变换
1
第3章 变换
基本的二维几何变换 二维复合变换 其他二维变换 三维几何变换 OpenGL几何变换函数 三维图形的显示流程 投影 裁剪
2
几何变换
应用于对象几何描述并改变它的位置、方 向或大小的操作称为几何变换(geometric transformation) 基本的二维几何变换包括平移、旋转和缩 放
8
矩阵表示和齐次坐标
许多图形应用涉及到几何变换的顺序 需要用一个通式来表示平移、旋转和缩放
P M1 P M 2
将2×2矩阵扩充为3×3矩阵,可以把二维几 何变换的乘法和平移项组合为单一矩阵表示
9
二维平移矩阵
x 1 0 t x x y 0 1 t y y 1 0 0 1 1
三维坐标轴旋转
X轴坐标不变,循环替代x、y、z三个 轴可以得到绕x轴旋转的公式
z
y ' y cos z sin
y
z ' y sin z cos x' x
x
35
三维坐标轴旋转
y轴坐标不变,循环替代x、y、z三个 轴可以得到绕y轴旋转的公式
x
z
y
z ' z cos x sin x' z sin x cos y' y
glMatrixMode (GL_MODELVIEW); glColor3f (0.0, 0.0, 1.0); glRecti (50, 100, 200, 150); //显示蓝色矩形
glColor3f (1.0, 0.0, 0.0); glTranslatef (-200.0, -50.0, 0.0); glRecti (50, 100, 200, 150); //显示红色、平移后矩形

OpenGL模型变换

OpenGL模型变换

OpenGL两种投影方式投影变换是一种很关键的图形变换,OpenGL中只提供了两种投影方式,一种是正射投影,另一种是透视投影。

不管是调用哪种投影函数,为了避免不必要的变换,其前面必须加上以下两句:glMatrixMode(GL_PROJECTION);glLoadIdentity();事实上,投影变换的目的就是定义一个视景体,使得视景体外多余的部分裁剪掉,最终图像只是视景体内的有关部分。

本节将详细讲述投影变换的概念以及用法。

1 正射投影(Orthographic Projection)正射投影,又叫平行投影。

这种投影的视景体是一个矩形的平行管道,也就是一个长方体。

正射投影的最大一个特点是无论物体距离相机多远,投影后的物体大小尺寸不变。

这种投影通常用在建筑蓝图绘制和计算机辅助设计等方面,这些行业要求投影后的物体尺寸及相互间的角度不变,以便施工或制造时物体比例大小正确。

此种模式下,不需要设定照相机位置、方向以及视点的位置,也就是说不需要gluLookAt函数。

OpenGL正射投影函数共有两个。

一个函数是:glOrtho(left, right, bottom, top, near, far),left表示视景体左面的坐标,right表示右面的坐标,bottom表示下面的,top表示上面的。

这个函数简单理解起来,就是一个物体摆在那里,你怎么去截取他,先单独理解glOrtho的功能。

假设有一个球体,半径为1,圆心在(0, 0, 0),那么,我们设定glOrtho(-1.5, 1.5,-1.5, 1.5, -10, 10);就表示用一个宽高都是3的框框把这个球体整个都装了进来。

如果设定glOrtho(0.0, 1.5, -1.5, 1.5, -10, 10);就表示用一个宽是1.5,高是3的框框把整个球体的右面装进来;如果设定glOrtho(0.0, 1.5, 0.0, 1.5, -10, 10);就表示用一个宽和高都是1.5的框框把球体的右上角装了进来。

计算机图形学实验报告

计算机图形学实验报告

计算机图形学实验报告
在计算机图形学课程中,实验是不可或缺的一部分。

通过实验,我们可以更好地理解课程中所学的知识,并且在实践中掌握这些
知识。

在本次实验中,我学习了如何使用OpenGL绘制三维图形,并了解了一些基本的图形变换和视图变换。

首先,我们需要通过OpenGL的基本命令来绘制基本图形,例
如线段、矩形、圆等。

这些基本的绘制命令需要首先设置OpenGL 的状态,例如绘制颜色、线段宽度等,才能正确地绘制出所需的
图形。

然后,在实验中我们学习了图形的变换。

变换是指通过一定的
规则将图形的形状、位置、大小等进行改变。

我们可以通过平移、旋转、缩放等变换来改变图形。

变换需要按照一定的顺序进行,
例如先进行旋转再进行平移等。

在OpenGL中,我们可以通过设
置变换矩阵来完成图形的变换。

变换矩阵包含了平移、旋转、缩
放等信息,通过矩阵乘法可以完成图形的复合变换。

最后,视图变换是指将三维场景中的图形投影到二维平面上,
成为我们所见到的图形。

在实验中,我们学习了透视投影和正交
投影两种方式。

透视投影是指将场景中的图形按照视点不同而产
生不同的远近缩放,使得图形呈现出三维感。

而正交投影则是简单地将场景中的图形按照平行投影的方式呈现在屏幕上。

在OpenGL中,我们可以通过设置视图矩阵和投影矩阵来完成视图变换。

通过本次实验,我对于计算机图形学有了更深入的了解,并掌握了一些基本的图形绘制和变换知识。

在今后的学习中,我将继续学习更高级的图形绘制技术,并应用于实际的项目中。

“计算机图形学课件-OpenGL基础”

“计算机图形学课件-OpenGL基础”

OpenGL的帧缓存:双缓存和 多重采样缓存
双缓存
为避免屏幕出现闪烁和拉伸等现象,通常使用双缓存技术。
多重采样缓存
用于提高渲染质量,避免出现棱边、走样等问题。
模型矩阵
用于设置物体的位置、大小、 旋转等属性。
视图矩阵
定义了摄像机的位置和方向, 使得透视校正可以应用到场 景中的物体。
投影矩阵
用于将三维场景投影到二维 视口上,包括透视投影和正 交投影。
OpenGL的剪切与裁剪
剪切测试
用于决定是否绘制部分可见的 图形,提高渲染效率。
裁剪平面
使用裁剪平面来剔除不在视锥 体内的图形,避免不必要的渲 染操作。
计算机图形学课件—— OpenGL基础
计算机图形学是探索计算机如何生成、处理和显示图形的学科。本课件将介 绍OpenGL基础,包括历史、基本概念和常用功能。
OpenGL是什么?
OpenGL是跨平台的、开放源代码的图形库,用于开 发各种图形应用程序。
OpenGL支持2D和3D图形,能够创建高性能的交互 式应用程序。
2000年至今
OpenGL被广泛应用于游戏、虚拟现实、工业和科学领域等,迎来了历史性的变革。
OpenGL的版本和兼容性
OpenGL版本
当前最新版本是4.6版,最早 的版本是1.0版。
OpenGL兼容性
OpenGL的兼容性很广,支 持多种操作系统、程序语言 和硬件平台。
OpenGL ES
OpenGL ES是OpenGL的移 动版,支持嵌入式平台和移 动设备,提供比较小的API和 功能。
顶点着色器
处理顶点的位置和颜色等信息。
几何着色器
处理三角形内外和相邻三角形之间的关 系。

第四章OpenGL图形变换(一)

第四章OpenGL图形变换(一)

第四章 OpenGL 图形变换OpenGL 图形变换是OpenGL 技术体系的核心内容之一,它的最主要功能是让虚拟世界里的物体动起来,是虚拟世界的动力驱动系统,也可以称之三维图形系统的引擎!OpenGL 图形变换的主要内容包括几何变换、投影变换、裁剪变换、视口变换等,本章尽量以通俗易懂的方式来讲解各技术要点。

4. 1 图形变换浅说OpenGL 图形变换和照相是非常相似的,它们之间的关系大致描述如下。

1、视点变换(View Transformation ) 视点变换相当于把相机放到一定的位置上,镜头对准场景。

如图4-1所示。

图4-1 视点变换与相机定位在OpenGL中,默认情况下,视点变换相当于把相机放到世界坐标系的原点(0,0,0),镜头指向Z轴的负方向,相当于从世界坐标系的原点向屏幕内部的虚拟场景观察。

2、模型变换(Model Transformation)模型变换相当于场景中人物或对象位置的变化、角度的改变和大小的改变。

图4-2 虚拟照相场景中的人物YXZ观察方向X照相时场景中的人物或对象需要作调整,以便他们位于场景中合适的位置上。

有此时候人物不在视野范围内时,还要走动一下,进入镜头场景内,方向不对时,还要转动一下,眼睛转向镜头。

比如图4-2所示,照相时,警察不在镜头场景内,他需要向后向移动。

中间的企鹅背对镜头,他需要转过向来面向镜头。

企鹅向左边的气球中吹气,气球变大。

调整后的场景如图4-3所示。

图4-3 虚拟照相场景中的调整后人物或对象上述调整过程中的人员移动 和企鹅的转身动作 和气球充气变大 都属于模型变换。

3、投影变换(Projection Transformation ) 投影变换相当于调整相机镜头焦距,放大或缩小景物(如图4-4所示)。

图4-4 投影变换与相机焦距调整OpenGL 中投影变换的本质功能是定义一个视景体,使视景体外的多余部分被裁剪掉,再把景物变换到一个规则投影体(高、宽、深均为2个单位的立方体)。

投影变换(计算机图形学)资料

投影变换(计算机图形学)资料

2009-2010-2:CG:SCUEC
10
正投影之三视图
当投影面与某个坐标轴垂直 时,得到的空间物体的投影 为正投影(三视图)
1. 三视图分为正视图、侧视图
和俯视图.
2. 对应的投影平面分别与x轴, y 轴,z轴垂直。
三视图
三视图常用于工程制图,因为在其上可以测量距离和
角度。但一个方向上的视图只反映物体的一个侧面,只有 将三个方向上的视图结合起来,才能综合出物体的空间结 构和形状。
2009-2010-2:CG:SCUEC
4
投影变换的概念
近平面
远平面 Z
X
投影平面 V′ U′
窗口 X′ Y′
Y 投影线
视点
透视投影
视点:三维空间中任意选择的一个点,亦称为投影中心 投影平面:不经过视点的任意一个平面 投影线:从视点向投影平面的引出的任意一条射线
2009-2010-2:CG:SCUEC
x
xq zc
yq
0
0 zc
xc yc
0 0
y z
xp
xq q
,
yp
yq q
q 0
0
1
zc
1
2009-2010-2:CG:SCUEC
8
平行投影
平行投影可以看成投影中心移向无穷远时的极限情况。
设给定的投影方向为( xd , yd , zd )。在要投影的对象附近任取一点
(xs , ys , zs),以此点为起点作一射线,其指向是投影方向的反方向,
oz 和 轴的单位方向向量为 (a11, a12 , a13 ) 、 (a21, a22 , a23 ) 和
(a31, a32 , a33 ) ,那么从坐标系oxyz到 o xyz 的变换是

详解OpenGL的坐标系、投影和几何变换

详解OpenGL的坐标系、投影和几何变换

详解OpenGL的坐标系、投影和几何变换作者:charlee 按:我也是在迷茫中走过来的,初学OpenGL时,略微了解了一些有关变换的基本知识,但是却不知道具体的使用方法,因此经常需要在布置场景时反复调整各种参数。

当我终于有一天明白了它们的用法时,就觉得应该把这些心得体会写下来,让那些和我一样曾经迷茫过的人能够迅速地找到出路。

本文的读者对象为那些初学OpenGL,了解了一些坐标系、几何变换等基本知识,但是又不知道具体应该如何运用这些操作的人。

如果你对OpenGL一无所知,建议你先去学学OpenGL的基本知识。

1 坐标系OpenGL中使用的坐标系有两种,分别为世界坐标系和屏幕坐标系。

世界坐标系即OpenGL内部处理时使用的三维坐标系,而屏幕坐标系即为在计算机屏幕上绘图时使用的坐标系。

通常,OpenGL所使用的世界坐标系为右手型,如下图所示。

从计算机屏幕的角度来看,x轴正方向为屏幕从左向右,y轴正方向为屏幕从下向上,z轴正方向为屏幕从里向外。

而进行旋转操作时需要指定的角度θ的方向则由右手法则来决定,即右手握拳,大拇指直向某个坐标轴的正方向,那么其余四指指向的方向即为该坐标轴上的θ角的正方向(即θ角增加的方向),在上图中用圆弧形箭头标出。

2 投影将世界坐标系中的物体映射到屏幕坐标系上的方法称为投影。

投影的方式包括平行投影和透视投影两种。

平行投影的投影线相互平行,投影的结果与原物体的大小相等,因此广泛地应用于工程制图等方面。

透视投影的投影线相交于一点,因此投影的结果与原物体的实际大小并不一致,而是会近大远小。

因此透视投影更接近于真实世界的投影方式。

B 平行投影B透视投影xzy 02.1 平行投影OpenGL 中使用下面的函数来设置投影方式为平行投影。

glOrtho(xleft, xright, ybottom, ytop, znear, zfar); 各参数的含义如下图所示。

注意,只有位于立方体之内的物体才可见。

第四讲 OpenGL变换

第四讲 OpenGL变换

第四讲 OpenGL 变换OpenGL 变换包括:几何变换、投影变换、裁剪变换和视口变换,想要真正走进三维世界,必须对这些知识有所了解。

三维图形的显示流程:三维图形的显示流程首先将世界坐标系中的三维物体经过一系列的几何变换(平移、旋转和伸缩),为了使显示的物体能以合适的位置、大小和方向显示出来,必须要通过投影,然后定义一个三维视景体,对物体进行裁剪,仅使投影在视景体内的部分显示出来;第二步在屏幕窗口内定义一个矩形,称为视口(Viewport),视景体投影后的图像就在视口内显示;最后做一些适当 变换,使图形在屏幕坐标系下显示。

比如你要照相,首先你会站到一个合适的位置,并摆好一个姿势,这个过程相当于几何变换;选择相机(相机正对的方向相当于构造了一个视景体),不在相机前方视景体内的物体被裁剪;拍照相片最后要在计算机上显示出来,还要经过一个视口变换,这就是说相片上的那部分要在窗口内进行显示。

1、模型变换模型变换在世界坐标系中进行的,OpenGL 在这个坐标系中有3个函数可以进行模型变换。

(1)模型平移glTranslate{fd}( x, y, z);该函数用指定的x,y,z 值沿着x 轴、y 轴和 z 轴平移物体(2)模型旋转glRotate{fd}( angle, x, y, z);angle 指定旋转的角度,单位为度( °),后3个变量表示以原点(0,0,0)到点(x, y, z)的连线为轴线逆时针旋转物体。

例如,glRotatef(45,0,0,1)的结果是饶z 轴旋转45度。

(3)模型缩放glScale{fd}( x, y, z);(x, y, z)分别表示物体在x,y,z 轴方向的缩放变换比例因子,默认为1.0,即物体没有变化。

每一步的变换在没有经过处理时,是在前一步的基础上叠加的,也即OpenGL中的所有变换都会叠加。

glTranslatef(1.0f,0.0f,0.0f);glutWireCube(1.0f); //将立方体物体向x轴正向移动1个单位距离。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验名称:OpenGL投影变换(实验四)
班级:信09-1
学号:2108190911211
姓名:王杰
【实验目的】
1、掌握GLUT中多面体和二次曲面的生成
2、掌握正交投影及透视投影变换
【实验内容】
1、源程序
#include <glut.h>
GLsizei winWidth = 500, winHeight = 500;
void init(void)
{
glClearColor(1.0,1.0,1.0,0.0);
}
void display(void)
{
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(0.0,0.0,0.0);
glTranslatef(0.0,0.0,-5.0);
glRotatef(30,2,2,2);
glutWireOctahedron ( );//八面体
glFlush();
}
void winReshapeFcn(GLint newWidth,GLint newHeight) {
glViewport(0,0,newWidth,newHeight);
glMatrixMode(GL_PROJECTION);
//glFrustum(-2.0,2.0,-2.0,2.0,2.0,20.0);//透视投影
glOrtho(-2.0,2.0,-2.0,2.0,2.0,20.0);//正交投影
glMatrixMode(GL_MODELVIEW);
glClear(GL_COLOR_BUFFER_BIT);
}
void main(int argc,char** argv)
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);
glutInitWindowPosition(100,100);
glutInitWindowSize(winWidth,winHeight);
//glutCreateWindow("投影变化—透视投影");
glutCreateWindow("投影变化—正交投影");
init();
glutDisplayFunc(display);
glutReshapeFunc(winReshapeFcn);
glutMainLoop();
}
2、运行结果截图(两幅)
3、正交及透视投影函数功能及使用说明
glFrustum(-2.0,2.0,-2.0,2.0,2.0,20.0);//透视投影glOrtho(-2.0,2.0,-2.0,2.0,2.0,20.0);//正交投影
glutCreateWindow("投影变化—透视投影");
glutCreateWindow("投影变化—正交投影");。

相关文档
最新文档