计算机图形学OpenGL(第三版)第三章更多的绘图工具课件.ppt

计算机图形学OpenGL(第三版)第三章更多的绘图工具课件.ppt

  1. 1、本文档共50页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
计算机图形学OpenGL(第三版)第三章更多的绘图工具课件

本章内容 介绍视口和裁剪 开发窗口到视口的变换 开发一个经典的裁剪算法 创建世界坐标系中绘图的工具 开发选择窗口和视口的方法,以达到最佳视觉效果 基于正多边形,弧线,圆建立图形 描述参数定义的曲线,并理解它们的绘制技术 3.1 概述 屏幕坐标系:x方向从0到screenWidth-1,y方向从0到screenHeight-1,它是设备坐标系,有一个视口。 世界坐标系:笛卡尔坐标系,逻辑坐标系。 3.2 世界窗口和视口 信号处理中非常重要的函数sinc,它的定义为: 当x!=0,且sin(0)=1 要绘制的曲线如右图, 比如限定x在-4到4变化,使用 setWindow()来建立世界窗口,使用setViewport()来建立视口。通过设置一个世界窗口 和一个视口,并建立它们之间的一个合适的映射,可以完成适当的缩放和平移。窗口是在世界坐标系,而视口是屏幕坐标系。 绘制sinc的代码见计算机图形学课件2016\计算机图形学(Opengl版第三版)书源代码word版\第三章代码.doc 3.2.1 窗口到视口的映射 世界窗口由它的左、上、右、下的边界描述,分别是W.l, W.t, W.r, 和 W.b,视口在屏幕坐标系中,使用V.l, V.t, V.r, 和V.b,单位是像素。 世界窗口必须是对齐的矩形,但它可以有任意大小及出现在任何位置。视口也是矩形,位于屏幕窗口内。给定窗口和视口的描述,可以得到一个映射或变换,即窗口到视口的映射。这个映射是一个等式,它对每一个在世界坐标下的点(x, y),产生屏幕坐标系中的一个点(sx, sy)。我们希望这个映射是保持比例的映射。例如x是位于窗口中距离左边界40%处,则sx应该位于视口中距离左边界40%处。保持比例的性质使得这个映射有线性形式: sx = A * x + C sy = B * y + D 其中A, B, C 和 D是常数。常数A, B缩放x坐标和y坐标,而C 和D平移它们。 如何确定A, B, C 和D呢?(sx - V.l) 与视口宽度 (V.r - V.l) 的比例,必须等于 (x - W.l) 与窗口宽度(W.r -W.l)的比例。 所以有: 窗口到视口的变换见 右边。有如下性质: a. 如果x在窗口的左边界: x = W.l,则sx是在视口的左边界sx= V.l; b. 如果x是在窗口的右边界,则sx是在 视口的右边界。 c. 对于某个比例f,如果x位于窗口宽度 1/f处,则sx位于视口宽度的1/f处; d.如果x在窗口左边界外(x w.l), 则sx在视口的左边界外(sx V.l)。 此外,y到sy有类似的 特征。 例3.2.1 考虑如右图的窗口和视口。窗口的(W.l, W.r, W.b, W.t) = (0,2.0, 0, 1.0),视口的(V.l, V.r, V.b, V.t) = (40, 400, 60, 300)。 由右下角的等式得: A = 180, C = 40, B = 240, D = 60 窗口到视口的映射为: sx = 180 x + 40 sy = 240 y + 60 练习:建立映射 对于世界窗口 (10.0, 10.0, -6.0, 6.0) 和视口 (0, 600, 0, 400),这个 窗口和视口有同样的纵横比吗? 答:没有 因为长宽比一个为1.7,另一个 为1.5. 设立窗口到视口的映射 OpenGL使得窗口到视口的变换很容易。OpenGL通过一系列变换完成所需要的映射,自动传送到每个顶点,它还自动裁剪掉对象在世界窗口之外的部分。对于二维绘图来说,世界窗口由函数gluOrtho2D()设定,它的原型是: void gluOrtho2D(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top); 即左右下上 视口的设定通过glViewport()函数,它的原型是: void glViewport(GLint x, GLint y, GLint width, GLint height); 相当于设置左下角(x, y) 和右上角 (x + width, y + height). 即左下角和宽高。 我们用setWindow()函数设置窗口,用setViewport()函数设置视口; //--------------- setWindow --------------------- 即窗口的左右下上 void setWindow(float left, float right, float bottom, float top) { glMatrixMode(GL_PR

文档评论(0)

jiayou10 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8133070117000003

1亿VIP精品文档

相关文档