2.2完整的程序 计算机图形学 OpenGL 课件

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

计算机图形学杨武影像科学与技术实验室东南大学计算机学院yangwu@seu.edu.cn2第二章之第二节完整的程序3主要内容修改第一个程序–改变默认值–定义标准程序结构简单视图–二维视图:三维视图的特殊情形OpenGL中的基本形状属性4程序结构绝大多数OpenGL程序具有类似的结构,包含下述函数–main():•定义回调函数•打开一个或多个具有指定属性的窗口•进入事件循环(最后一条可执行语句)–init():设置状态变量•视图•属性–回调函数•显示函数•输入和窗口函数5Simple.c修改在新程序中,会得到同样的输出,但是所有具有默认值的相应状态值都通过函数调用显式指定特别地,设置了–颜色–视图条件–窗口属性6main.c#includeGL/glut.hintmain(intargc,char**argv){glutInit(&argc,argv);glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);glutInitWindowSize(500,500);glutInitWindowPosition(0,0);glutCreateWindow(simple);glutDisplayFunc(mydisplay);init();glutMainLoop();}包含了gl.h定义窗口属性设置OpenGL状态进入时间循环显示回调函数7GLUT函数glutInit使得应用程序可以获取命令行参数并初始化系统gluInitDisplayMode设置窗口属性–RGB颜色–单缓冲区–属性按逻辑或组合在一起glutWindowSize以像素为单位glutWindowPosition定义窗口左上角在显示器上的位置glutCreateWindow创建一个窗口,标题“simple”glutDisplayFunc定义显示回调函数glutMainLoop进入无穷事件循环8init.cvoidinit(){glClearColor(0.0,0.0,0.0,1.0);glColor3f(1.0,1.0,1.0);glMatrixMode(GL_PROJECTION);glLoadIdentity();glOrtho(-1.0,1.0,-1.0,1.0,-1.0,1.0);}背景色为黑不透明窗口白色填充视景体9坐标系在glVertex中的单位是由应用程序确定的,称为世界坐标系视景体也是相对于世界坐标系指定的,视景体确定出现在图像中的对象在OpenGL内部,会把世界坐标转化为照相机坐标,稍后转化为屏幕坐标10OpenGL照相机照相机放置在原点,指向z轴的负方向默认的视景体是一个中心在原点,长为2的立方体11在默认的正交视图中,点沿着z轴投影到z=0的平面上正交视图z=012变换与视图在OpenGL中投影是利用投影矩阵乘法进行的由于只存在一个变换函数系列,因此必须先设置矩阵模式glMatrixMode(GL_PROJECTION)变换函数是累加在一起的,因此需要从单位阵开始,然后把它改变为一个投影矩阵以定义视景体glLoadIdentity();glOrtho(-1.0,1.0,-1.0,1.0,-1.0,1.0);13二维与三维视图在glOrtho(左,右,底,顶,近,远)中的近与远是相对于照相机的距离而言的二维顶点命令把所有的顶点放在z=0的平面上如果应用程序处于二维状态,那么可以使用下述函数设置正交视景体:gluOrtho2D(left,right,bottom,top)对于二维情形,视景体或裁剪体退化为裁剪窗口14mydisplay.cvoidmydisplay(){glClear(GL_COLOR_BUFFER_BIT);glBegin(GL_POLYGON);glVertex2f(-0.5,-0.5);glVertex2f(-0.5,0.5);glVertex2f(0.5,0.5);glVertex2f(0.5,-0.5);glEnd();glFlush();}15OpenGL基本形状GL_QUAD_STRIPGL_POLYGONGL_TRIANGLE_STRIPGL_TRIANGLE_FANGL_POINTSGL_LINESGL_LINE_LOOPGL_LINE_STRIPGL_TRIANGLES16多边形的条件OpenGL只能显示满足下述条件的多边形–简单:边除顶点外不相交–凸:对于多边形中任意两点,连接这两点的线段完全在多边形内–平面:所有顶点在同一平面上用户自己确保上述条件满足三角形满足上述所有限制条件非简单多边形非凸多边形17字符笔划字符–由顶点、线段和曲线描绘–利于变换处理–占内存、处理时间长光栅字符–矩阵位图–处理速度快18属性属性是OpenGL中状态的一部分,确定对象的外观–颜色(points,lines,polygons)–大小和宽度(points,lines)–线型(lines,polygons)–多边形•颜色填充•边界显示19RGB颜色颜色的每个分量在帧缓冲区中是分开存贮的在缓冲区中通常每个分量占用8位字节注意在函数glColor3f中颜色值的变化范围是从0.0(无)到1.0(全部),而在glColor3ub中颜色值的变化范围是从0到25520索引颜色由一组RGB值构成一张表,“颜色”是表中项的索引需要更少的内存–索引通常只有8位–现在重要性下降•内存价格下降•需要更多的颜色21颜色与状态由glColor*设置的颜色成为状态的一部分,后续构造过程将使用这一颜色,直至它被修改为止–颜色与其它属性不是对象的一部分,但是在渲染对象时要把这些属性赋给对象可以按下述过程创建具有不同颜色的顶点glColorglVertexglColorglVertex22色彩的平滑默认状态是光滑过渡–OpenGL根据多边形顶点的颜色插值出来内部的颜色另外一种状态是平坦过渡–第一个顶点的颜色确定填充颜色glShadeModel(GL_SMOOTH)或(GL_FLAT)23视窗并不需要把整个当前窗口用来显示图像:glViewport(x,y,w,h)参数值以像素为单位(屏幕坐标)

1 / 23
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功