opengl 图形的变换与裁剪
OpenGL计算机图形学梁友栋裁剪算法实验代码及运行结果

《计算机图形学实验》报告任课教师:钱文华2016年春季学期实验:梁友栋裁剪实验时间:2016年11月17日实验地点:信息学院2204实验目的:掌握梁友栋裁剪程序代码:#include <stdio.h>#include <glut.h>#include <stdlib.h>#include <math.h>class wcPt2D{public:GLfloat x,y;void setCoords(GLfloat xCoord,GLfloat yCoord){x=xCoord;y=yCoord;}GLfloat getx() const{return x;}GLfloat gety() const{return y;}};inline GLint round(const GLfloat a){return GLint(a+0.5);}void setPixel(int x,int y){glBegin(GL_POINTS);glVertex2i(x,y);glEnd();}void init(){glClearColor(1.0,1.0,1.0,0.0);glMatrixMode (GL_PROJECTION);gluOrtho2D(-200.0,200.0,-200.0,200.0);}void lineBres(GLfloat x0,GLfloat y0,GLfloat xEnd,GLfloat yEnd){ int dx = fabs(xEnd - x0),dy = fabs(yEnd - y0);int p = 2*dy - dx;int twoDy = 2*dy,twoDyMinusDx = 2*(dy - dx);int x,y;if(x0>xEnd){x = xEnd;y = yEnd;xEnd = x0;}else{x = x0;y = y0;}setPixel(x,y);while(x<xEnd){x++;if(p<0)p+=twoDy;else{y++;p+=twoDyMinusDx;}setPixel(x,y);}}GLint clipTest(GLfloat p,GLfloat q,GLfloat *u1,GLfloat *u2){ GLfloat r;GLint returnValue = true;if(p<0.0){r = q/p;if(r>*u2)returnValue = false;elseif(r>*u1)*u1 = r;}elseif(p>0.0){r = q/p;if(r<*u1)returnValue = false;else if(r<*u2)*u2 = r;}elseif(q<0.0)returnValue = false;return(returnValue);}void lineClipLiangBarsk(wcPt2D winMin,wcPt2D winMax,wcPt2D p1,wcPt2D p2){GLfloat u1 = 0.0,u2 = 1.0,dx = p2.getx()-p1.getx(),dy;GLfloat x1 = p1.getx(),y1 = p1.gety();GLfloat x2 = p2.getx(),y2 = p2.gety();if(clipTest(-dx,p1.getx()-winMin.getx(),&u1,&u2))if(clipTest(dx,winMax.getx()-p1.getx(),&u1,&u2)){dy = p2.gety()-p1.gety();if(clipTest(-dy,p1.gety()-winMin.gety(),&u1,&u2)){if(clipTest(dy,winMax.gety()-p1.gety(),&u1,&u2)){if(u2<1.0){p2.setCoords(p1.getx()+u2*dx,p1.gety()+u2*dy);}if(u1>0.0){p1.setCoords(p1.getx()+u1*dx,p1.gety()+u1*dy);}glColor3f(0.0,0.0,0.0);lineBres(x1,y1,p1.getx(),p1.gety());lineBres(p2.getx(),p2.gety(),x2,y2);glColor3f(1.0,0.0,0.0);lineBres(p1.getx(),p1.gety(),p2.getx(),p2.gety());}}else{glColor3f(0.0,0.0,0.0);lineBres(x1,y1,x2,y2);}}}void displayliangyoudongcaijian(){glClear(GL_COLOR_BUFFER_BIT);glLineWidth(5.0);glColor3f(0.0,0.0,0.0);glBegin(GL_LINE_LOOP);glVertex2i(100,100);glVertex2i(100,-100);glVertex2i(-100,-100);glVertex2i(-100,100);glEnd();glPointSize(4);wcPt2D test1[4] = {{-100.0,-100.0},{100.0,100.0},{-150.0,-200.0},{200.0,120.0}};wcPt2D test2[4] = {{-100.0,-100.0},{100.0,100.0},{-150.0,-120.0},{0.0,0.0}};wcPt2D test3[4] = {{-100.0,-100.0},{100.0,100.0},{-50.0,50.0},{150.0,150.0}};wcPt2D test4[4] = {{-100.0,-100.0},{100.0,100.0},{-50.0,0.0},{60.0,50.0}};wcPt2D test5[4] = {{-100.0,-100.0},{100.0,100.0},{-170.0,-200.0},{200.0,-120.0}};lineClipLiangBarsk(test1[0],test1[1],test1[2],test1[3]);lineClipLiangBarsk(test2[0],test2[1],test2[2],test2[3]);lineClipLiangBarsk(test3[0],test3[1],test3[2],test3[3]);lineClipLiangBarsk(test4[0],test4[1],test4[2],test4[3]);lineClipLiangBarsk(test5[0],test5[1],test5[2],test5[3]);glFlush();}void main(int argc, char* argv[]){glutInit(&argc,argv);glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);glutInitWindowPosition(50,100);glutInitWindowSize(400,300);glutCreateWindow("梁友栋裁剪算法");init();glutDisplayFunc(displayliangyoudongcaijian);glutMainLoop();}实验结果:。
gltranslatef函数

gltranslatef函数
glTranslatef函数是一种OpenGL图形系统提供的基本函数,它的作用是改变图形的位置。
它接受三个参数,分别是X轴、Y轴和Z 轴的转换值。
它可以实现3D图形的平移操作,也可以用于2D图形的平移操作。
glTranslatef函数的一般语法如下:
glTranslatef (x, y, z);
其中,参数x,y,z是位移的量,表示在X,Y,Z轴上平移的距离。
glTranslatef函数可以用来实现对图形对象统一的平移操作,这样可以减少程序的开发和调试工作量,更加便捷。
同时,也可以用来在3D世界中实现物体的移动。
例如,要将一个物体平移到另一个位置,可以使用glTranslatef函数来实现,传递参数x,y,z表示物体在X,Y,Z轴上的位移。
在OpenGL中,图形的变换操作(包括缩放、旋转、平移等)都是以矩阵形式进行操作的。
在调用glTranslatef函数时,系统会使用一个4x4的矩阵来改变图形的位置,矩阵的第4列的四个元素就是glTranslatef传入的参数x,y,z。
glTranslatef函数是OpenGL中非常重要的一个函数,它可以实现最基本的平移操作:x,y,z轴上的位移。
同时,它也可以用于实现3D世界中物体移动的操作,因此,glTranslatef函数在OpenGL
图形系统中十分重要,也是非常常用的函数。
- 1 -。
计算机图形学实验报告

计算机图形学实验报告
在计算机图形学课程中,实验是不可或缺的一部分。
通过实验,我们可以更好地理解课程中所学的知识,并且在实践中掌握这些
知识。
在本次实验中,我学习了如何使用OpenGL绘制三维图形,并了解了一些基本的图形变换和视图变换。
首先,我们需要通过OpenGL的基本命令来绘制基本图形,例
如线段、矩形、圆等。
这些基本的绘制命令需要首先设置OpenGL 的状态,例如绘制颜色、线段宽度等,才能正确地绘制出所需的
图形。
然后,在实验中我们学习了图形的变换。
变换是指通过一定的
规则将图形的形状、位置、大小等进行改变。
我们可以通过平移、旋转、缩放等变换来改变图形。
变换需要按照一定的顺序进行,
例如先进行旋转再进行平移等。
在OpenGL中,我们可以通过设
置变换矩阵来完成图形的变换。
变换矩阵包含了平移、旋转、缩
放等信息,通过矩阵乘法可以完成图形的复合变换。
最后,视图变换是指将三维场景中的图形投影到二维平面上,
成为我们所见到的图形。
在实验中,我们学习了透视投影和正交
投影两种方式。
透视投影是指将场景中的图形按照视点不同而产
生不同的远近缩放,使得图形呈现出三维感。
而正交投影则是简单地将场景中的图形按照平行投影的方式呈现在屏幕上。
在OpenGL中,我们可以通过设置视图矩阵和投影矩阵来完成视图变换。
通过本次实验,我对于计算机图形学有了更深入的了解,并掌握了一些基本的图形绘制和变换知识。
在今后的学习中,我将继续学习更高级的图形绘制技术,并应用于实际的项目中。
图形变换与裁剪课件

计算机图形设计中的应用
图像处理
通过图形变换和裁剪技术,对图像进 行缩放、旋转、剪切等操作,实现图 像的优化和美化。
3D模型渲染
虚拟现实和增强现实
在虚拟现实和增强现实应用中,图形 变换和裁剪技术用于创建逼真的虚拟 场景和增强现实元素。
利用图形变换和裁剪技术,渲染3D模 型,制作出逼真的三维效果图和动画。
提高变换的效率
减少不必要的变换
在图形处理中,尽量减少不必 要的变换操作,特别是那些不
会改变图像内容的变换。
使用合适的变换算法
选择高效的变换算法,如矩阵 乘法、仿射变换等,可以大大 提高变换的效率。
并行计算
利用多核处理器或GPU进行并 行计算,可以加快变换过程。
缓存和重用
将已经计算过的变换结果缓存 起来,避免重复计算,提高变
虚拟现实和增强现实中的应用
场景渲染
通过图形变换和裁剪技术,渲染 虚拟现实和增强现实场景,提供
沉浸式的体验。
交互设计
利用图形变换和裁剪技术,设计虚 拟现实和增强现实的交互方式,提 高用户体验。
实时跟踪
通过图形变换和裁剪技术,实现虚 拟现实和增强现实的实时跟踪,提 高虚拟物体的真实感和动态效果。
05 图形变换与裁剪的优化 技巧
计算机图形设计中的图形变换与裁剪案例
要点一
计算机图形设计中的图形变换
要点二
计算机图形设计中的裁剪技术
在计算机图形设计中,图形变换被广泛应用于创建复杂的 二维和三维图像。例如,通过将图像进行旋转、平移和缩 放等操作,可以创造出富有创意的艺术作品。
在计算机图形设计中,裁剪技术用于确定图像的可见部分。 通过裁剪,可以只显示图像的一部分,或者将图像的一部 分隐藏起来,以达到特定的视觉效果。
深入分析OpenGL实现原理与优化方法

深入分析OpenGL实现原理与优化方法OpenGL是一种广泛应用于计算机图形学领域的开源API。
它提供了一套用于绘制三维图像的工具包,既可以在桌面应用中使用,也可以在移动应用和Web应用中使用。
OpenGL使用C语言编写,并允许程序员自定义实现方法,以满足不同需求。
OpenGL的工作原理OpenGL的工作基于两个基本概念:渲染管道和状态机。
渲染管道指的是将输入的图形数据转换成最终显示在屏幕上的像素的处理过程。
渲染管道包括:顶点处理、几何处理、光栅化和片元处理。
状态机将OpenGL的状态分为多个状态,能够按照需要切换不同的状态,从而控制OpenGL的一些行为,如深度测试、剔除等。
OpenGL的工作流程为:先将图形数据通过顶点处理器进行处理,再经过几何处理器处理为顶点可能需要的形式,并进行坐标映射和变换处理等。
接下来,OpenGL对形状进行光栅化,将每个点转换为一个像素点,并对特定区域进行操作。
最后,将特定的像素点按照一定的顺序绘制出来,形成最终的图像。
OpenGL的性能优化方法OpenGL的性能直接影响着三维场景的流畅体验。
在实际应用中,处理逻辑复杂的三维场景时,需要使用一些优化方法来提高OpenGL的性能。
1. 缩小绘制范围绘制的范围越小,执行的次数就越少,能够显著提高OpenGL 的性能。
因此,需要保证只绘制可见的图像区域,同时尽可能少绘制不可见区域。
2. 减少光照计算光照处理需要很大的计算量,影响OpenGL性能。
可以通过一些技巧,如减少光源的数量,简化物体材质等方式减少光照计算量。
3. 减少纹理数量和大小OpenGL需要消耗大量的内存来维护纹理,特别是在绘制大型场景时,如果每个物体都使用高质量的纹理,会占用大量内存和处理时间。
因此,可以通过降低纹理质量或减少纹理数量来优化OpenGL的性能。
4. 合并绘制在绘制物体时,可以合并相邻的物体,以减少绘制次数,提高OpenGL的性能。
5. 使用缓存在OpenGL中,使用缓存可以减少CPU与GPU之间的数据传输时间,提高性能。
第四章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个单位的立方体)。
计算机图形学的裁剪算法

计算机图形学的裁剪算法
计算机图形学的裁剪算法是图形学的一种重要算法,它的基本思想是将一个完整的几何图形(如线段、多边形、圆圈等)按照指定的裁剪窗口(矩形)进行裁剪,只保留在窗口内的部分,而把窗口外的部分抛弃掉。
由于裁剪算法的应用非常广泛,像图形显示系统、图形设备接口(GDI)和图形处理器(GPU)等都广泛使用裁剪算法。
计算机图形学的裁剪算法可以分为两种:2D裁剪算法和
3D裁剪算法。
2D裁剪算法是基于二维空间的,它将一个几何
图形投影到一个平面上,然后按照指定的窗口裁剪;而3D裁
剪算法是基于三维空间的,它将一个几何图形投影到一个三维空间,然后按照指定的窗口裁剪。
2D裁剪算法的基本步骤如下:首先,将要裁剪的几何图
形投影到平面上;其次,计算出投影后的几何图形以及裁剪窗口之间的交点;最后,将裁剪窗口内的部分保留,而把窗口外的部分抛弃掉。
3D裁剪算法的基本步骤如下:首先,将要裁剪的几何图
形投影到三维空间;其次,计算出投影后的几何图形以及裁剪窗口之间的交点;最后,将裁剪窗口内的部分保留,而把窗口外的部分抛弃掉。
计算机图形学的裁剪算法在图形处理中有着重要的作用,它不仅能够有效减少图形处理时间,而且还可以节约存储空间。
此外,它还可以有效提高图形处理效率,提高图形显示效果。
但是,它也存在着一定的局限性,比如,当几何图形的运动变得复杂时,它就会变得费时费力,这就对性能产生了一定的影响。
总之,计算机图形学的裁剪算法是图形学的重要算法,它的应用非常广泛,在图形处理中有着重要的作用。
虽然它也存在着一定的局限性,但是它仍然是一种有效的图形处理算法。
实验一 opengl高级图形图像实验报告

高级图形图像第一次实验报告一、实验描述以及关键步骤1.opengl编程环境组建(基于VC6.0)1)下载opengl开发库文件夹;2)复制glut32.dll和glut.dll到…\windows\system32;3)复制glut.h到...\Microsoft Visual Studio\VC98\Include\GL;4)复制glut32.lib和glut.lib到…\Microsoft Visual Studio\VC98\Lib;5)新建工程后,进入Project菜单,选Settings项,弹出 Settings 对话框,选Link项,在 Libraries 栏目中加入OpenGL库:opengl32.lib glu32.lib glaux.lib。
2.基本图形绘制首先运行一个Windows环境下的一个基本OpenGL程序,直接打开60version文件夹内的工程,它将显示一个空的OpenGL窗口,可以在定制窗口大小和全屏模式下切换(按F1),按ESC退出,该程序为以后的应用程序提供了实验平台,并预留了绘图接口。
根据教材P67-70,了解绘制函数,根据附件2提供的源码baseshape.cpp,将该文件内的场景绘制函数Drawsence()替代空窗口程序中的同名函数,修改图形绘制命令和参数,显示出点、线、矩形、三角形等,可设置不同线宽。
3.图形的二维变换根据附件3提供源码,将该文件内的场景绘制函数Drawsence()替代空窗口程序中的同名函数,通过调用glTranslate*, glRotate*,glscale*等二维变换函数实现平移、旋转、缩放等变换,通过参数操作和矩阵操作两种方式执行。
glTranslatef:在opengl中,函数glTranslatef的作用就是移动坐标原点。
glRotatef:glRotatef( angle, x, y, z )函数的作用是将当前坐标系以a( x, y, z )向量为旋转轴旋转angle角度,满足右手法则,即沿着右手握拳时四个手指指向的方向旋转。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
12
0 1/ sx 1 1 S −1 = S ( , ) = 0 1/ s y sx s y 0 0
复合二维变换
复合二维平移
3
关于齐次坐标
用一个n+1维向量表示一个n维向量
二维点(x,y),用(X,Y,ω)表示: (2,3)的齐次坐标表示可 以是(4,6,2)、(3,4.5,1.5) ω可以任意选取
齐次坐标与普通坐标之间是一一对应关系
x=X/ω y=Y/ω
ω
P
齐次坐标表示点的优势
防止浮点数溢出 矩阵变换的统一表示
X ω=1 平面 Y
局部坐标系可以简化物体的定义 物体={标准体素,变换}
造型变换:
物体从局部坐标系到世界坐标系的变换 三维线性和非线性变换
28
三维模型变换:平移
三维平移T:三维点P(x,y,z)移动(tx,ty,tz)后, 得到点P'(x',y',z')
x′ 1 ′ y = 0 z′ 0 1 0 0 1 0 0 0 t x x 0 t y y 1 t z z 0 1 1
y
P
P'
x
z
32
三维模型变换
绕z轴逆时针旋转θ角的旋转变换Rz (注: θ可以是(x,y,z)的函数)
x′ cosθ ′ y = sin θ z′ 0 1 0 − sin θ cosθ 0 0 0 0 x 0 0 y 1 0 z 0 1 1
二维标系与 屏幕的物理坐标系 变换:设备变换、视窗变换
25
三维变换流程图
局部坐标系
造型变换
世界坐标系
取景变换
视点坐标系
投影变换
图像坐标系
设备变换
规格化设备 坐标系
视窗变换
屏幕坐标系
26
三维变换中的各种坐标系
27
场景坐标系和模型变换
几何场景建立于世界坐标系中 场景中的具体物体与局部坐标系相联系
y
α = arctan(− )
A B
y
α
o
1 0 C / A T1 = 0 1 0 0 0 1
x
o
cos α T2 = − sin α 0 sin α cos α 0
x
0 0 1
19
复合二维变换(实例)
y y y
o
x
o
x
− sin α cos α 0
其中sx和sy分别为x和y分量的放缩比例
x
8
剪切变换(Shear)
沿X-轴方向的剪切变换
Y (x,y) (x',y')
α
X
x′ 1 tgα ′ y = 0 1 1 0 0
0 x 0 y 1 1
(1) 变换过程中, y坐标保持不变,而x坐标值发生线性变化; (2) 平行于X轴的线段变换后仍平行于X轴,平行于Y轴的线段变换 后错切成与Y轴成固定角α的直线
内容
二维变换 三维变换 裁剪
1
内容
二维变换
齐次坐标表示 基本变换 其它变换
三维变换 裁剪
2
二维变换
通过二维变换和裁剪,将定义在二维世界 坐标系中的物体变换到以像素为单位的屏 幕坐标系中,实现二维物体的光栅显示
矢量图形、卡通动画
二维图形中常见的变换
齐次坐标表示: 基本变换:平移、旋转、放缩 其它变换:剪切、对称、复合
关于坐标原点的对称变换
x′ 1 0 0 x ′ y = 0 −1 0 y 1 0 0 1 1
关于X轴的对称变换
10
对称变换
Y y=x (x,y) O X (-y,-x) (y,x)
x′ 0 1 0 x ′ y = 1 0 0 y 1 0 0 1 1
0 x 0 y 1 1
θ ϕ
7
二维缩放
对于进行放缩的变换公式
y
x′ sx ′ y = 0 1 0
0 sy 0
0 x 0 y 1 1
S ( sx , s y )
U = V×N
得到两个向量 U=(Ux,Uy,Uz) 和V=(Vx,Vy,Vz), 然后单位化。
37
视点坐标系的交互建立
四个矢量C、U、V、N组成了视点坐标系 由世界坐标系到视点坐标系的取景变换:
u U x v = Vx n Nx 1 0 Uy Vy Ny 0 Uz Vz Nz 0 0 1 0 0 0 0 1 0 0 1 0 0 0 −C x x 0 −C y y 1 −Cz z 0 1 1
P' T
P
5
二维旋转
将点P(x,y)绕坐标原点按逆时针旋转角θ
x ' = r cos(θ + ϕ ) = r cos ϕ cos θ − r sin ϕ sin θ y ' = r sin(θ + ϕ ) = r cos ϕ sin θ + r sin ϕ cos θ
y
P'
x = r cos ϕ y = r sin ϕ
o
x
−1 0 0 T3 = 0 1 0 0 0 1
cos α T4 = sin α 0
0 0 1
1 0 −C / A T5 = 0 1 0 0 0 1
20
复合二维变换(实例)
y
o
x
sin 2α − cos 2α 0 (cos 2α − 1) * C / A sin 2α * C / A 1
关于直线y=x的对称变换
Y
(x,y)
O
X y=-x
x′ 0 −1 0 x ′ y = −1 0 0 y 1 0 0 1 1
关于直线y=-x的对称变换
11
逆变换
平移变换 旋转变换 缩放变换
1 0 −t x T −1 = T (−t x , −t y ) = 0 1 −t y 0 0 1
30
三维模型变换
绕x轴逆时针旋转θ角的旋转变换Rx’ (注: θ可以是(x,y,z)的函数)
0 x′ 1 ′ y = 0 cosθ z ′ 0 sin θ 1 0 0 0 − sin θ cosθ 0 0 x 0 y 0 z 1 1
9
对称变换
Y (-x,y) (-x,-y) (x,y) X (x,-y)
x′ −1 0 0 x ′ y = 0 1 0 y 1 0 0 1 1
关于Y轴的对称变换
O
x′ −1 0 0 x ′ y = 0 −1 0 y 1 0 0 1 1
4
二维平移
二维点P(x, y)移动(tx, ty)后,得到点P’(x’, y’)
P' = P +T
x′ 1 0 t x x ′ y = 0 1 t y y 1 0 0 1 1
T (t x , t y )
(x, y, z, 1)为世界坐标系中的点 (u, v, n, 1)为视点坐标系中的点
38
投影坐标系和投影变换
投影变换:三维→二维
y
T (t2 x , t2 y ) ⋅ T (t1x , t1 y ) = T (t2 x + t1x , t2 y + t1 y )
P ''
T2
P'
T1 + T2
T1
P
x
13
复合二维变换
复合二维旋转
y
P ''
R(θ 2 ) ⋅ R(θ1 ) = R(θ1 + θ 2 )
θ2
P'
θ1 + θ 2
P
y
x
z
29
三维模型变换:放缩
三维放缩S:三维点P(x,y,z)放缩(sx,sy,sz)后, 得到点P' (x',y',z')
x′ sx ′ y 0 = z′ 0 1 0 0 sy 0 0 0 0 sz 0 0 x 0 y 0 z 1 1
P
θ ϕ
x
x ' = x cos θ − y sin θ y ' = x sin θ + y cos θ
6
二维旋转
将点P(x,y)绕坐标原点按逆时针旋转角θ
y
P'
x′ cosθ ′ y = sin θ 1 0
P
− sin θ cosθ 0
R(θ )
真实的照相机
计算机中的虚拟照相机
23
三维变换的基本概念
场景造型:
场景坐标系:世界坐标系、局部坐标系 变换:造型变换
放置虚拟照相机
坐标系:视点坐标系(虚拟照相机的位置、朝 向以及向上的方向) 变换:取景变换 (在视域四棱锥进行裁剪和背 面剔除 )