自学计算机图形学OpenGL(二)画线段、多边形、三角形

绘制线段

画线段首先要把点画出来

#include<GL/glut.h>

void lines()
{
    int p1[] = { 6,4 };//第一个点,x=6 y=4
    int p2[] = { 1,1 };
    int p3[] = { 3,7 };
    int p4[] = { 5,1 };
    int p5[] = { 0,4 };
    glClear(GL_COLOR_BUFFER_BIT);//清除当前被激活为写操作的颜色缓存
    glColor3f(0.3, 0.1, 0.8);
    glPointSize(3);
    glBegin(GL_POINTS);//绘制点
    glVertex2iv(p1);
    glVertex2iv(p2);
    glVertex2iv(p3);
    glVertex2iv(p4);
    glVertex2iv(p5);
    glEnd();
    glFlush();//将缓存推送到屏幕上
}

void init()
{
    glClearColor(1.0, 1.0, 1.0, 0.0);//设置窗口背景色
    glMatrixMode(GL_PROJECTION);//设置为正投影模式
    glLoadIdentity();//类似复位操作
    gluOrtho2D(-10, 20, -10, 20);//设置投影范围
}

int main(int argc,char*argv[])
{
    glutInit(&argc, argv);//初始化
    glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);//设置为rgb且单缓冲区
    glutInitWindowPosition(300, 100);//设置窗口的位置
    glutInitWindowSize(600, 500);//设置窗口的大小
    glutCreateWindow("Lines");//窗口上方的文字

    init();//初始化函数
    glutDisplayFunc(lines);//回调函数
    glutMainLoop();
    return 0;
}

运行效果长这样:

把glBegin(GL_POINTS);改成glBegin(GL_LINES);就能得到下图:

由此可以看出,它把第一个点和第二个点连成了一条线,第三个点和第四个点连成了一条线。

把glBegin(GL_LINES);改为glBegin(GL_LINE_STRIP);效果是这样的:

这种写法的含义是p1连接到p2,p2连接到p3,p3连接到p4,p4连接到p5。

把glBegin(GL_LINE_STRIP);改为glBegin(GL_LINE_LOOP);效果是一个五角星:

这种写法,最后一个点会和第一个点连接成线。

绘制多边形和三角形

和上面的大致一样,不过这次我们用glBegin(GL_POLYGON);

#include<GL/glut.h>

void PolygonTriangle()
{
    int p1[] = { 1,3 };
    int p2[] = { 3,0 };
    int p3[] = { 6,0 };
    int p4[] = { 7,3 };
    int p5[] = { 6,6 };
    int p6[] = { 3,6 };
    glClear(GL_COLOR_BUFFER_BIT);//清除当前被激活为写操作的颜色缓存
    glColor3f(0.6, 0.5, 0.2);
    glPointSize(3);
    glBegin(GL_POLYGON);//绘制多边形
    glVertex2iv(p1);
    glVertex2iv(p2);
    glVertex2iv(p3);
    glVertex2iv(p4);
    glVertex2iv(p5);
    glVertex2iv(p6);
    glEnd();
    glFlush();//将缓存推送到屏幕上
}

void init()
{
    glClearColor(1.0, 1.0, 1.0, 0.0);//设置窗口背景色
    glMatrixMode(GL_PROJECTION);//设置为正投影模式
    glLoadIdentity();//类似复位操作
    gluOrtho2D(-10, 20, -10, 20);//设置投影范围
}

int main(int argc,char*argv[])
{
    glutInit(&argc, argv);//初始化
    glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);//设置为rgb且单缓冲区
    glutInitWindowPosition(300, 100);//设置窗口的位置
    glutInitWindowSize(600, 500);//设置窗口的大小
    glutCreateWindow("PolygonTriangle");//窗口上方的文字

    init();//初始化函数
    glutDisplayFunc(PolygonTriangle);//回调函数
    glutMainLoop();
    return 0;
}

这样就可以画出一个丑陋的多边形:

把glBegin(GL_POLYGON);改为glBegin(GL_TRIANGLES);可以绘制三角形:

由此可以看出是p1,p2,p3构成了一个三角形,p4,p5,p6构成了一个三角形。

把glBegin(GL_TRIANGLES);改为glBegin(GL_QUADS);可以绘制四边形:

glBegin参数总结

glBegin的参数设置

含义

GL_POINTS

显示点

GL_LINES

显示两点两点的连线

GL_LINE_STRIP

显示依次连接的线段

GL_LINE_LOOP

显示依次连接的线段,并且首尾相连

GL_POLYGON

多边形

GL_TRIANGLES

三角形

GL_QUADS

四边形

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值