OpenGL | OpenGL 绘制其他图形及线框

一、绘制点GL_POINTS

OpenGL默认绘制的点大小是1px,可以使用glPointSize()来改变点的大小,但是要注意:glPointSize()不能放在glBegin()和glEnd()之间,要放在glBegin()之前。

1.代码

void Draw()
{
    glClearColor(1, 1, 1, 1.0f);  //白色背景
    glClear(GL_COLOR_BUFFER_BIT);
    //绘制点
    glPointSize(10.0f);
    glBegin(GL_POINTS);

    glColor4ub(255, 0, 0, 255);
    glVertex3d(-0.2f, 0, -1.5f);

    glColor4ub(0, 255, 0, 255);
    glVertex3d(-0.1f, 0, -1.5f);

    glColor4ub(0, 0, 255, 255);
    glVertex3d(-0.0f, 0, -1.5f);

    glEnd();
}

2.绘制效果

二、绘制线

1.GL_LINES

可以连接每一对相邻点(两个两个为一对,不能重复使用)而得到一组直线。如果最后一个端点处于奇数位置,则该点会被忽略。

(1)代码

void Draw()
{
    glClearColor(1, 1, 1, 1.0f);  //白色背景
    glClear(GL_COLOR_BUFFER_BIT);

    //绘制线
    glLineWidth(10.0f);
    glBegin(GL_LINES);
    glColor4ub(255, 0, 0, 255);//红
    glVertex3f(-0.4f, 0.0f, -1.5f);

    glColor4ub(0, 255, 0, 255);//绿
    glVertex3f(0.0f, 0.0f, -1.5f);

    glColor4ub(0, 0, 255, 255);//蓝
    glVertex3f(0.0f, 0.2f, -1.5f);

    glColor4ub(0, 255, 255, 255);//青
    glVertex3f(0.0f, 0.4f, -1.5f);
    glEnd();
}

(2)效果

2.GL_LINE_STRIP

会将传入的点依次连接直到最后一个端点。

(1)代码

void Draw()
{
    glClearColor(1, 1, 1, 1.0f);  //白色背景
    glClear(GL_COLOR_BUFFER_BIT);

    //绘制线
    glLineWidth(10.0f);
    glBegin(GL_LINE_STRIP);
    glColor4ub(255, 0, 0, 255);//红
    glVertex3f(-0.4f, 0.0f, -1.5f);

    glColor4ub(0, 255, 0, 255);//绿
    glVertex3f(0.0f, 0.0f, -1.5f);

    glColor4ub(0, 0, 255, 255);//蓝
    glVertex3f(0.0f, 0.2f, -1.5f);

    glColor4ub(0, 255, 255, 255);//青
    glEnd();
}

(2)效果

3.GL_LINE_LOOP

在GL_LINE_STRIP的基础上又进行了首尾相连。

(1)代码

void Draw()
{
    glClearColor(1, 1, 1, 1.0f);  //白色背景
    glClear(GL_COLOR_BUFFER_BIT);

    //绘制线
    glLineWidth(10.0f);
    
    glBegin(GL_LINE_LOOP);
    glColor4ub(255, 0, 0, 255);//红
    glVertex3f(-0.4f, 0.0f, -1.5f);

    glColor4ub(0, 255, 0, 255);//绿
    glVertex3f(0.0f, 0.0f, -1.5f);

    glColor4ub(0, 0, 255, 255);//蓝
    glVertex3f(0.0f, 0.2f, -1.5f);

    glColor4ub(0, 255, 255, 255);//青
    glVertex3f(0.0f, 0.4f, -1.5f);
    glEnd();
}

(2)效果

三、绘制四边形

1.GL_QUADS

注意和GL_TRIANGLE_STRIP的区别。

(1)代码

void Draw()
{
    glClearColor(1, 1, 1, 1.0f);  //白色背景
    glClear(GL_COLOR_BUFFER_BIT);

    glBegin(GL_QUADS);
    glColor4ub(0, 0, 255, 255);   //蓝
    glVertex3f(-0.2f, -0.2f, -1.5f);

    glColor4ub(255, 0, 0, 255);   //红
    glVertex3f(0.2f, -0.2f, -1.5f);

    glColor4ub(0, 255, 255, 255);   //青
    glVertex3f(0.4f, 0.2f, -1.5f);

    glColor4ub(0, 255, 0, 255);   //绿
    glVertex3f(0.0f, 0.2f, -1.5f);

    glEnd();
}

(2)效果

2.GL_QUAD_STRIP

绘制一组连接的四边形。每个四边形是由一对顶点及其后给定的一对顶点共同确定的。总共绘制N/2-1个四边形。 注意:顶点用于从GL_QUAD_STRIP构造四边形的顺序与GL_QUADS使用的顺序不同。

(1)代码

void Draw()
{
    glClearColor(1, 1, 1, 1.0f);  //白色背景
    glClear(GL_COLOR_BUFFER_BIT);

    glBegin(GL_QUAD_STRIP);
    glColor4ub(0, 0, 255, 255);   //蓝
    glVertex3f(-0.2f, -0.2f, -1.5f);

    glColor4ub(255, 0, 0, 255);   //红
    glVertex3f(0.2f, -0.2f, -1.5f);

    glColor4ub(0, 255, 0, 255);   //绿
    glVertex3f(0.0f, 0.0f, -1.5f);

    glColor4ub(0, 255, 255, 255);   //青
    glVertex3f(0.4f, 0.0f, -1.5f);

    glColor4ub(255, 0, 255, 255);   //粉
    glVertex3f(0.13f, 0.2f, -1.5f);

    glColor4ub(0, 0, 0, 255);   //黑
    glVertex3f(0.53f, 0.2f, -1.5f);

    glEnd();
}

(2)效果

四、绘制凸多边形GL_POLYGON

绘制单个凸面多边形。 顶点 1 到 N 定义此多边形。

1.代码

void Draw()
{
    glClearColor(1, 1, 1, 1.0f);  //白色背景
    glClear(GL_COLOR_BUFFER_BIT);

    glBegin(GL_POLYGON);
    glColor4ub(0, 0, 255, 255);   //蓝
    glVertex3f(-0.2f, -0.2f, -1.5f);

    glColor4ub(255, 0, 0, 255);   //红
    glVertex3f(0.2f, -0.2f, -1.5f);

    glColor4ub(0, 255, 255, 255);   //青
    glVertex3f(0.4f, 0.0f, -1.5f);

    glColor4ub(0, 255, 0, 255);   //绿
    glVertex3f(0.0f, 0.0f, -1.5f);

    glColor4ub(255, 0, 255, 255);   //粉
    glVertex3f(-0.13f, 0.2f, -1.5f);

    glColor4ub(0, 0, 0, 255);   //黑
    glVertex3f(-0.53f, 0.2f, -1.5f);

    glEnd();
}

2.效果

五、绘制线框glPolygonMode

1.绘制线框

在glBegin()之前加入 glPolygonMode(GL_FRONT, GL_LINE);即可打开线框模式。(glPolygonMode默认为GL_FILL模式)

(1)代码

void Draw()
{
    glPolygonMode(GL_FRONT, GL_LINE);
    glBegin(GL_TRIANGLES);        //注意是逆时针绘制(CCW),可以通过   glFrontFace(GL_CW); 改成顺时针绘制
   
    glColor4ub(0, 0, 255, 255);   //蓝
    glVertex3f(-0.2f, -0.2f, -1.0f);

    glColor4ub(255, 0, 0, 255);   //红
    glVertex3f(0.2f, -0.2f, -1.0f);

    glColor4ub(0, 255, 0, 255);   //绿
    glVertex3f(0.0f, 0.2f, -1.0f);
    glEnd();
}

(2)效果

2.绘制点

在绘制图形的时候除了用默认的填充方式及线框模式,还可以使用点模式(默认点是矩形,我们可以改为圆形)。

(1)代码

void Draw()
{
    glPolygonMode(GL_FRONT, GL_POINT);
    glPointSize(10.0f);           //点大小
    glEnable(GL_POINT_SMOOTH);    //点圆滑效果
    glBegin(GL_TRIANGLES);        //注意是逆时针绘制(CCW),可以通过   glFrontFace(GL_CW); 改成顺时针绘制
   
    glColor4ub(0, 0, 255, 255);   //蓝
    glVertex3f(-0.2f, -0.2f, -1.0f);

    glColor4ub(255, 0, 0, 255);   //红
    glVertex3f(0.2f, -0.2f, -1.0f);

    glColor4ub(0, 255, 0, 255);   //绿
    glVertex3f(0.0f, 0.2f, -1.0f);
    glEnd();
}

(2)效果

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

烫青菜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值