计算机图形与OpenGL学习二(输出图元1:点和线的绘制)
本次学习输出图元,首先介绍一些基础概念。
【基础概念】
图元:图形软件包中用来描述各种图形元素的函数,也称为图形输出原语。
几何图元:描述对象集合要素的输出图元。
图形软件保重的几何图元有:点的位置,直线段,圆,其他二次曲线,二次曲面,样条曲线,曲面及多边形填色区域。
坐标系统:
为了描述图形,必须首先确定一个称为世界坐标系的合适的二维或三维笛卡尔坐标系。接着通过给出世界坐标系中的位置等几何描述来定义图形中的对象。
这些坐标位置与该对象的颜色,坐标范围(minX,minY,minZ,maxX,maxY,maxZ)等其他信息一起存储在场景描述中。坐标范围也称为对象的包围盒。通过将场景信息传送给观察函数,观察函数会识别可见面,映射到观察设备显示。扫描转换过程将颜色值等场景信息保存到帧缓存的相应位置,从而在输出设备上显示场景中的对象。
屏幕坐标:
屏幕上的位置使用与真缓存中的像素位置相对应的整数屏幕坐标。像素的坐标值由扫描行号(y值),扫描列好(x值)所确定。屏幕刷新等硬件处理一般从屏幕左上角开始对像素进行编址,即最上面是第0行。但是软件命令可以按照任何方式设定屏幕位置的参考系统,如设置左下角为原点(上一篇文章中我们使用gluOrtho2D命令,就是设定左下角为原点的笛卡尔坐标系),这样是更便于理解的。
【OpenGL图元的绘制】
① 点的绘制
要描述一个店,只需在世界坐标系中制定一个位置。然后该坐标位置和场景中已有的其他几何描述一起被传递给观察子程序。默认图元颜色为白色,默认的点的大小是单一屏幕像素大小。
1.指定点坐标的函数:glVertex*();*是后缀码,指明空间维数,坐标值变量的数据类型。如glVertex2i()是2维空间整数型。坐标数值的数据类型有:i(整数),s(短整数),f(浮点数),d(双精度浮点数)
2.完整的设置点的函数:
glBegin(GL_POINTS);//指明显示点
glVertex*(x,y);//指定点位置
glEnd();
3.实例:
【代码】
glPointSize(10);//设定点大小,默认为1个像素,太小了
glBegin(GL_POINTS);//设定为点
glVertex2i(50,100);//指定第一个点
glVertex2i(75, 150);//指定第二个点
glVertex2i(100, 200);//指定第二个点
glEnd();//结束
【输出】
② 线段的绘制
1.glBegin(GL_LINES)可连接相邻的端点。如果顶点数是奇数个,则最后一个顶点不予显示。
设置五个点:
int p1[]= {50,10};
int p2[] = {240,10};
int p3[] = {10, 200};
int p4[] = {280,200};
int p5[] = { 145, 290};
使用:
glBegin(GL_LINES);
glVertex2iv(p1);
glVertex2iv(p2);
glVertex2iv(p3);
glVertex2iv(p4);
glVertex2iv(p5);
glEnd();
得到
2.使用GL_LINE_STRIP可以获得折线,得到一组从第一个端点到最后一个端点首尾相连的折线线段。使用上例的代码和结果如下
glBegin(GL_LINE_STRIP);
glVertex2iv(p1);
glVertex2iv(p2);
glVertex2iv(p3);
glVertex2iv(p4);
glVertex2iv(p5);
glEnd();
3.使用GL_LINE_LOOP可生成封闭折线,增加一条直线段,将最后一个端点与第一个端点相连,我们调整一下顶点顺序,画一个五角星。
glBegin(GL_LINE_LOOP);
glVertex2iv(p1);
glVertex2iv(p4);
glVertex2iv(p3);
glVertex2iv(p2);
glVertex2iv(p5);
glEnd();
③ 曲线的绘制
之后介绍。。。。下一篇介绍多边形填充