计算机图形学(第四章图形变换与输出).ppt

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
OpenGL颜色模式 几乎所有OpenGL应用目的都是在屏幕窗口内绘制彩色图形,所以颜色在OpenGL编程中占有很重要的地位。 颜色生成原理计算机颜色不同于绘画或印刷中的颜色,显示于计算机屏幕上每一个点的颜色都是由监视器内部的电子枪激发的三束不同颜色的光(红、绿、蓝)混合而成,因此,计算机颜色通 常用R(Red)、G(Green)、B(Blue)三个值来表示,这三个值又称为颜色分量。颜色生成原理 示意图见下图所示。 RGB色立体(RGB Color Cube)   所有显示器屏幕的颜色都属于RGB颜色空间,如果用一个立方体形象地表示RGB颜色组成关系,那么就称这个立方体为RGB色立体,如图所示。 颜色模式   OpenGL颜色模式一共有两个:RGB(RGBA)模式和颜色表模式。 在RGB模式下,所有的颜色定义全用R、G、B三个值来表示,有时也加上Alpha值(与透明度有关),即RGBA模式。 在颜色表模式下,每一个象素的颜色是用颜色表中的某个颜色索引值表示,而这个索引值指向了相应的R、G、B值。这样的一个表成为颜色映射(Color Map)。 RGBA模式(RGBA Mode)   在RGBA模式下,可以用glColor*()来定义当前颜色。其函数形式为:   void glColor3{b s i f d ub us ui}(TYPE r,TYPE g,TYPE b);   void glColor4{b s i f d ub us ui}(TYPE r,TYPE g,TYPE b,TYPE a);颜色表模式(Color_Index Mode)   在颜色表方式下,可以调用glIndex*()函数从颜色表中选取当前颜色。 阴影模式设定 一个线段图元或一个填充的多边形图元既可以用单一的色彩,也可以用许多不同的色彩来绘制。 利用下面这个函数来指定期望的阴影模式。 Void glShadeModel(Glenum mode); GL_FLAT:无差别阴影模式 GL_SMOOTH:平滑阴影模式 举例 定义视区 在缺省情况下,视区设置成与所开窗口一样大小的矩形。 glViewport(Glint x,Glint y,Glsizei width, Glsizei height) 矩阵堆栈 顾名思义,堆栈指的是一个顶部打开底部封闭的柱状物体,通常用来存放常用的东西。这些东西从顶部依次放入,但取出时也只能从顶部取出,即“先进后出,后进先出”。在计算机中,它常指在内存中开辟的一块存放某些变量的连续区域。因此,OpenGL的矩阵堆栈指的就是内存中专门用来存放矩阵数据的某块特殊区域。   堆栈操作函数有以下两个:   void glPushMatrix(void);   void glPopMatrix(void); 可以形象地认为glPushMatrix()就是“记住自己在哪”,glPopMatrix()就是“返回自己原来所在地”。 机械手臂转动例子 void CALLBACK elbowAdd (void)   {elbow = (elbow + 5) % 360;   }   void CALLBACK elbowSubtract (void)   {elbow = (elbow - 5) % 360;   }   void CALLBACK shoulderAdd (void)   {shoulder = (shoulder + 5) % 360;   }   void CALLBACK shoulderSubtract (void)   {shoulder = (shoulder - 5) % 360;   } void CALLBACK display(void)   {glClear(GL_COLOR_BUFFER_BIT);glColor3f(0.0, 1.0, 1.0);glPushMatrix();glTranslatef (-0.5, 0.0, 0.0);glRotatef ((Glfloat) shoulder, 0.0, 0.0, 1.0);glTranslatef (1.0, 0.0, 0.0);auxWireBox(2.0, 0.2, 0.5);glTranslatef (1.0, 0.0, 0.0);glRotatef ((GLfloat) elbow, 0.0, 0.0, 1.0);glTranslatef (0.8, 0.0, 0.0);auxWireBox(1.6, 0.2, 0.5);glPopMatrix();glFlush();   } void myinit (void)   {glShadeModel (GL_FLAT);   }   void CALLBACK myR

文档评论(0)

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

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

版权声明书
用户编号:5311233133000002

1亿VIP精品文档

相关文档