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)效果

猜你喜欢

转载自blog.csdn.net/weixin_39766005/article/details/128840988
今日推荐