




已阅读5页,还剩7页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第2章 计算机图形系统【1】(1)电子枪发射电子束,经过聚焦在偏转系统控制下电子束轰击荧光屏,在荧光屏上产生足够小的光点,光点称为像素(pixel)。(2)阴极射线管在水平和垂直方向单位长度上能识别的最大光点数称为分辨率,分辨率越高,显示的画面越清晰。【2】(1)CRT聚焦系统通过电场或磁场控制电子束,使电子束“变细”,保证轰击荧光屏时产生的亮点足够小。为了提高显示系统的分辨率,聚焦系统是关键之一(2)CRT:加速电极加有正的高电压(达几万伏),使经过聚焦的电子束高速运动(3)CRT:偏转系统(由垂直偏转板和水平偏转板组成)偏转控制可以来用静电场,也可以采用磁场,控制电子束在水平方向上和竖直方向上的偏转。最大偏转角度是衡量偏转系统性能的最重要指标(4)持续发光时间指的是电子束离开某点后,该点亮度值衰减到初始值的110所需的时间。【3】真彩色系统:三个电子枪分别是三个通道,产生三色荧光点,具有24位面的帧缓冲存储器,红、绿、蓝各8个位面,其值经数模转换控制红、绿、蓝电子枪的强度,每支电子枪的强度有256(8位)个等级,则能显示256*256*256=16兆种颜色,16兆种颜色也称作(24位)真彩色。这种方法利用人们眼睛在超过一定距离后分辨力不高的特性,产生与直接混色法相同的效果【4】glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB); /单缓存,RGB窗口 /*以glutInit的例行初始化函数 *其中glutInitDisplayMode()定义显示方式 *参数是一个GLUT库里预定义的可能的布尔组合 * 指定颜色模式的预定义常量有: * 1:GLUT_RGBA或者GLUT_RGB指定一个RGBA窗口,这是一个默认的颜色模式。 * 2:GLUT_INDEX指定颜色索引模式。 * 选择缓冲区 * 1:GLUT_SINGLE单缓冲区窗口 * 2:GLUT_BUFFER双缓冲区窗口,这是产生流畅动画必须选的。 * 特殊的缓冲 * 1:GLUT_ACCUM累积缓冲区 * 2:GLUT_STENCIL模板缓冲区* 3:GLUT_DEPTH深度缓冲区。*/【5】/*glClear()函数的作用是用当前缓冲区清除值,也就是glClearColor *或者glClearDepth、glClearIndex、glClearStencil、glClearAccum等函数所指定的值来清除指定的缓冲区比如: * glClearColor(0.0,0.0,0.0,0.0); * glClear(GL_COLOR_BUFFER_BIT); *第一条语句表示清除颜色设为黑色,第二条语句表示实际完成了把整个窗口清除为黑色的任务 *glClear()的唯一参数表示需要被清除的缓冲区: * GL_COLOR_BUFFER_BIT: 当前可写的颜色缓冲 * GL_DEPTH_BUFFER_BIT: 深度缓冲 * GL_ACCUM_BUFFER_BIT: 累积缓冲 * GL_STENCIL_BUFFER_BIT: 模板缓冲 *也可以使用glDrawBuffer一次清除多个颜色缓存*glClear (GL_COLOR_BUFFER_BIT); glTranslatef(0.0f,-20.0f,-40.0f) 表示将当前图形向x轴平移0,向y轴平移-20,向z轴平移-40 glScaled(10.0f,10.0f,10.0f) 表示将当前图形沿x,y,z轴分别放大为原来的10倍 glRotatef(-80.0f,10.0f,1.0f,0.0f) 表示将当前图形沿方向向量(-10,1,0)顺时针旋转80度 glLoadIdentity() 将当前的用户坐标系的原点移到了屏幕中心:类似于一个复位操作【6】如果以顺时针绘制则是反面,逆时针绘制则是正面在三维空间中,一个多边形虽然有两个面,但我们无法看见背面的那些多边形,而一些多边形虽然是正面的,但被其他多边形所遮挡。如果将无法看见的多边形和可见的多边形同等对待,无疑会降低我们处理图形的效率。在这种时候,可以将不必要的面剔除。 首先,使用glEnable(GL_CULL_FACE);来启动剔除功能(使用glDisable(GL_CULL_FACE)可以关闭之) 然后,使用glCullFace来进行剔除。 glCullFace的参数可以是GL_FRONT,GL_BACK或者GL_FRONT_AND_BACK,分别表示剔除正面、剔除反面、剔除正反两面的多边形。 注意:剔除功能只影响多边形,而对点和直线无影响。例如,使用glCullFace(GL_FRONT_AND_BACK)后,所有的多边形都将被剔除,所以看见的就只有点和直线。【7】在OpenGL中实现双缓冲技术的一种简单方法:1.在调用glutInitDisplayMode函数时, 开启GLUT_DOUBLE,即glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE);。这里将我们惯用的GLUT_SINGLE替换为GLUT_DOUBLE,意为要使用双缓冲而非单缓冲。2. 调用glutDisplayFunc(display)注册回调函数时,在回调函数中所有绘制操作完成后调用glutSwapBuffers()交换两个缓冲区指针。3. 调用glutIdleFunc( )注册一个空闲时绘制操作函数,注册的这个函数再调用display函数。【8】画圆的代码:(1)普通const int n = 1000;const GLfloat R = 0.5f;const GLfloat Pi = 3.1415926536f;void DrawCircle() int i; glBegin(GL_LINE_LOOP); for(i=0; in; +i) glVertex2f(R*cos(2*Pi/n*i), R*sin(2*Pi/n*i); glEnd(); glFlush();void myDisplay() glClear(GL_COLOR_BUFFER_BIT); DrawCircle();(2)中点画圆法void CirclePoints(int x,int y,int cx,int cy) /(cx,cy)为圆心坐标 PlotPixel(x+cx, y+cy); PlotPixel(y+cx, x+cy); PlotPixel(-x+cx, y+cy); PlotPixel(y+cx, -x+cy); PlotPixel(x+cx,-y+cy); PlotPixel(-y+cx, x+cy); PlotPixel(-x+cx, -y+cy); PlotPixel(-y+cx, -x+cy);void DrawCircle(int cx, int cy, int radius) int e; int x,y; x=0; y=radius; e=5-4*radius; CirclePoints(x,y,cx,cy); while(x=y) if(e=abs(yb-ya)length = abs(xb-xa);elselength=abs(yb-ya);dx=(xb-xa)/length;dy=(yb-ya)/length;i=1;x=xa;y=ya;while(i0) xa = y1; ya = x1;xb = y2; yb = x2;if(xaxb)int tempx=xa;xa=xb;xb=tempx;int tempy=ya;ya=yb;yb=tempy;int dx = xb - xa, dy = abs(yb-ya);int p = 2 * dy - dx;int x, y; if(ya yb)ystep = 1;elseystep = -1;x=xa;y=ya;while(x0)PlotPixel(y,x);elsePlotPixel(x,y); if(p=0)y+=ystep;p += 2 * (dy - dx);else p += 2 * dy;x+;编程题【1】(1)draw()改写为:void sweep:draw()int findex;if(texture) texture-Use();glBegin(GL_QUADS);for(findex=0;findexUse();glBegin(GL_QUADS);/定义上平面的法向量、纹理坐标并绘制平面glNormal3fv(face_list0.normal);glTexCoord2f(0.0,0.0); /定义纹理坐标,左下glVertex3fv(vertex_listface_list0.index0.xyz);glTexCoord2f(1.0,0.0);/定义纹理坐标,右下glVertex3fv(vertex_listface_list0.index1.xyz);glTexCoord2f(1.0,1.0);/定义纹理坐标,右上glVertex3fv(vertex_listface_list0.index2.xyz);glTexCoord2f(0.0,1.0);/定义纹理坐标,左下glVertex3fv(vertex_listface_list0.index3.xyz);/下glNormal3fv(face_list1.normal);glTexCoord2f(0.0,0.0);glVertex3fv(vertex_listface_list1.index0.xyz);glTexCoord2f(1.0,0.0);glVertex3fv(vertex_listface_list1.index1.xyz);glTexCoord2f(1.0,1.0);glVertex3fv(vertex_listface_list1.index2.xyz);glTexCoord2f(0.0,1.0);glVertex3fv(vertex_listface_list1.index3.xyz);/前glNormal3fv(face_list2.normal);glTexCoord2f(0.0,0.0);glVertex3fv(vertex_listface_list2.index0.xyz);glTexCoord2f(1.0,0.0);glVertex3fv(vertex_listface_list2.index1.xyz);glTexCoord2f(1.0,1.0);glVertex3fv(vertex_listface_list2.index2.xyz);glTexCoord2f(0.0,1.0);glVertex3fv(vertex_listface_list2.index3.xyz); /后glNormal3fv(face_list3.normal);glTexCoord2f(0.0,0.0);glVertex3fv(vertex_listface_list3.index0.xyz);glTexCoord2f(1.0,0.0);glVertex3fv(vertex_listface_list3.index1.xyz);glTexCoord2f(1.0,1.0);glVertex3fv(vertex_listface_list3.index2.xyz);glTexCoord2f(0.0,1.0);glVertex3fv(vertex_listface_list3.index3.xyz); /左glNormal3fv(face_list4.normal);glTexCoord2f(0.0,0.0);glVertex3fv(vertex_listface_list4.index0.xyz);glTexCoord2f(1.0,0.0);glVertex3fv(vertex_listface_list4.index1.xyz);glTexCoord2f(1.0,1.0);glVertex3fv(vertex_listface_list4.index2.xyz);glTexCoord2f(0.0,1.0);glVertex3fv(vertex_listface_list4.index3.xyz);/右glNormal3fv(face_list5.normal);glTexCoord2f(0.0,0.0);glVertex3fv(vertex_listface_list5.index0.xyz);glTexCoord2f(1.0,0.0);glVertex3fv(vertex_listface_list5.index1.xyz);glTexCoord2f(1.0,1.0);glVertex3fv(vertex_listface_list5.index2.xyz);glTexCoord2f(0.0,1.0);glVertex3fv(vertex_listface_list5.index3.xyz);glEnd();glFlush();if(texture) glDisable(GL_TEXTURE_2D);cube:cube(void)if(vertex_list!=NULL) delete vertex_list;if(face_list!=NULL) delete face_list;void cube:calculateNormal(float*out, float*a, float*b, float*c)float v13, v23;/ calculate two vectors from the three points v10 = a 0- b0;v11 = a 1- b1;v12 = a 2- b2;v20 = b 0- c0;v21 = b 1- c1;v22 = b 2- c2;/ take the cross product out0 = v11*v22 - v12*v21; out1 = v12*v20 - v10*v22; out2 = v10*v21 - v11*v20; / normalize result float length=sqrt(out0*out0+out1*out1+out2*out2);out0 /= length; out1 /= length; out2 /= length; void cube:calculateNormals()/ first, calculate the normal for each face for (int i=0; iface_count; i+)calculateNormal( face_listi.normal,/ - receiververtex_listface_listi.index0.xyz,/ - first vertexvertex_listface_listi.index1.xyz,/ - second vertexvertex_listface_listi.index2.xyz ); / - third vertexfor (int i=0; ivertex_count; i+)vertex_listi.normal0=0.0;vertex_listi.normal1=0.0;vertex_listi.normal2=0.0;/ for each vertex, sum the sur
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年户外广告场地租赁合同模板(含广告设计)
- 2025年度城市公交车承运及运输服务管理合同
- 2025版山皮石运输合同附驾驶员培训与考核协议
- 2025年度商品房购买专项担保借款合同
- 2025年度大学教师学术休假与学术交流资助合同
- 2025版教师教育资源共享聘用合同
- 2025年度能源供应项目承包合作协议
- 2025版商业地产项目营销推广合同
- 2025年度知识产权代理服务合同终止与授权续期协议
- 2025版水利工程建设项目施工管理合同
- 500kV变电站屋外架构组立吊装工程施工安全技术交底
- 典范英语7-2中英文对照翻译Noisy Neighbours
- (完整版)污水处理站施工方案
- 排尿评估及异常护理
- 硅锰合金的冶炼要点
- 人教版七年级初一数学:期中考试初一数学试卷及答案
- PDCA护理质量持续改进提高护士交接班质量
- 减速机整机检验报告修改版
- 叉车日常检查维护记录
- DID双重差分法
- 《建筑装饰构造》全套教案(完整版)
评论
0/150
提交评论