一、绘制点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();
}