【openGL基础系列】之直线,折线,封闭折线
大家好,我是Lampard~~
欢迎来到openGL基础系列的博客
今天讲的是搭建openGL的显示出三种不同的线
1. 点glVertex*
俗话有云点线面,在讲解线之前首先和大家介绍一下openGL中点的实现函数:glVertex*,函数名我们不作探究,那么这个*是什么鬼呢? 其实*代表的是这个函数后需要接参数:i是整数,s是短整数,f是浮点数等等。举个例子如果我们想显示一个在二维坐标中(50, 50)的一个点,那么我们可以用一下的函数定义:
glVertex2i(50, 50)
值得一提的是,如果想让整个代码看起来更好整理更加规范,我们可以先把点定义出来,然后再在屏幕中显示:
int point[] = { 50, 50 }
glVertex2iv(point)
2. 直线GL_LINES
上一篇博客中我们有提及如何定义一条直线,那么两条,三条呢?其实很简单,我们只需要把行程直线的点按顺序放进去glBegin和glEnd之间就可以了,注意!点放置的顺序影响成图的效果,比如下面的例子中,p1是和p2配套成线,p3是和p4配套成线的。p5孤零零一人,则不会显示出来。
代码:
glClear(GL_COLOR_BUFFER_BIT); // 使颜色在屏幕显示
glColor3f(0.0, 0.4, 0.2); // 显示对象的颜色
int p1[] = { 20, 10 };
int p2[] = { 50, 30 };
int p3[] = { 20, 30 };
int p4[] = { 50, 10 };
int p5[] = { 30, 50};
glBegin(GL_LINES); // 直线段
glVertex2iv(p1); // 起始坐标
glVertex2iv(p2); // 终止坐标
glVertex2iv(p3); // 起始坐标
glVertex2iv(p4); // 终止坐标
glVertex2iv(p5);
glEnd(); // 结束
glFlush(); // 强制执行openGL函数
成像:
3. 折线GL_LINE_STRIP
如果想让孤零零的p5也参与进来,并且让他们行程相连的折线,我们可以在glBegin上加入GL_LINE_STRIP参数,此时p1会和p2相连,p2会和p3相连,以此类推。
代码:
glClear(GL_COLOR_BUFFER_BIT); // 使颜色在屏幕显示
glColor3f(0.0, 0.4, 0.2); // 显示对象的颜色
int p1[] = { 20, 10 };
int p2[] = { 50, 30 };
int p3[] = { 20, 30 };
int p4[] = { 50, 10 };
int p5[] = { 30, 50};
glBegin(GL_LINE_STRIP); // 折线段
glVertex2iv(p1);
glVertex2iv(p2);
glVertex2iv(p3);
glVertex2iv(p4);
glVertex2iv(p5);
glEnd(); // 结束
glFlush(); // 强制执行openGL函数
成像:
4. 封闭折线GL_LINE_LOOP
此时强迫症的我真是难受得不行,我好想把最后一笔填上aaaaaaaaaaaaaaa,额嗯那就用封闭折线GL_LINE_LOOP,这样的话p5就会和p1首尾相连。
代码:
glClear(GL_COLOR_BUFFER_BIT); // 使颜色在屏幕显示
glColor3f(0.0, 0.4, 0.2); // 显示对象的颜色
int p1[] = { 20, 10 };
int p2[] = { 50, 30 };
int p3[] = { 20, 30 };
int p4[] = { 50, 10 };
int p5[] = { 30, 50};
glBegin(GL_LINE_LOOP); // 封闭折线段
glVertex2iv(p1);
glVertex2iv(p2);
glVertex2iv(p3);
glVertex2iv(p4);
glVertex2iv(p5);
glEnd(); // 结束
glFlush(); // 强制执行openGL函数
成像:
OK,本章内容到此结束,更多内容,敬请关注!!!
各位大佬记得点赞关注支持........