OpenGL学习笔记之绘制图元
#include <gl/glew.h>
#include <gl/glut.h>
#include <iostream>
void DisplayFunc()
{
glClear(GL_COLOR_BUFFER_BIT);//用指定的颜色清屏
glPointSize(6.0f);//设置点的大小,单位为像素(默认为1.0f)
glBegin(GL_POINTS);//开始绘制 GL_POINTS 绘制多个点
{
glColor3f(0.6f,0.0f,0.0f);//设置点的颜色
glVertex2f(-0.8f,0.8f);//设置点的位置
glColor3f(0.0f,0.0f,0.6f);//设置点的颜色
glVertex2f(-0.6f,0.8f);
glColor3f(0.0f,0.6f,0.0f);//设置点的颜色
glVertex2f(-0.4f,0.8f);
}
glEnd();//结束绘制
glLineWidth(6.0f);//设置线的宽度,单位为像素(默认为1.0f)
glBegin(GL_LINES);//开始绘制 GL_LINES 绘制多条线
{
glColor3f(0.6f,0.0f,0.0f);//设置点的颜色
glVertex2f(-0.8f,0.7f);//设置点的位置
glColor3f(0.0f,0.0f,0.6f);//设置点的颜色
glVertex2f(-0.6f,0.7f);
}
glEnd();//结束绘制
glBegin(GL_LINE_LOOP);//开始绘制 GL_LINE_LOOP 循环画线
{
glColor3f(0.6f,0.0f,0.0f);//设置点的颜色
glVertex2f(-0.8f,0.6f);//设置点的位置
glColor3f(0.0f,0.0f,0.6f);//设置点的颜色
glVertex2f(-0.6f,0.6f);
glColor3f(0.0f,0.6f,0.0f);//设置点的颜色
glVertex2f(-0.7f,0.5f);
}
glEnd();//结束绘制
glBegin(GL_TRIANGLES);//开始绘制 GL_TRIANGLES 三角形
{
glColor3f(0.6f,0.0f,0.0f);//设置点的颜色
glVertex2f(-0.8f,0.4f);//设置点的位置
glColor3f(0.0f,0.0f,0.6f);//设置点的颜色
glVertex2f(-0.6f,0.4f);
glColor3f(0.0f,0.6f,0.0f);//设置点的颜色
glVertex2f(-0.7f,0.3f);
}
glEnd();//结束绘制
glShadeModel(GL_FLAT);//设置填充模式 GL_FLAT 平坦模式(以最后绘制的颜色为准) GL_SMOOTH 平滑模式(默认模式)
glBegin(GL_TRIANGLES);//开始绘制 GL_TRIANGLES 三角形
{
glColor3f(0.6f,0.0f,0.0f);//设置点的颜色
glVertex2f(-0.5f,0.4f);//设置点的位置
glColor3f(0.0f,0.0f,0.6f);//设置点的颜色
glVertex2f(-0.3f,0.4f);
glColor3f(0.0f,0.6f,0.0f);//设置点的颜色
glVertex2f(-0.4f,0.3f);
}
glEnd();//结束绘制
//OpenGL采用状态机制,一旦设置后,如果没有重新设置,则沿用之前的设置
//例如:如果我不将填充模式设置为平滑模式,则四边形会沿用我之前画三角形的平坦模式
glShadeModel(GL_SMOOTH);//设置填充模式 GL_FLAT 平坦模式(以最后绘制的颜色为准) GL_SMOOTH 平滑模式(默认模式)
glBegin(GL_QUADS);//开始绘制 GL_QUADS 四边形
{
glColor3f(0.6f,0.0f,0.0f);//设置点的颜色
glVertex2f(-0.5f,0.1f);//设置点的位置
glColor3f(0.0f,0.0f,0.6f);//设置点的颜色
glVertex2f(-0.5f,-0.2f);
glColor3f(0.0f,0.6f,0.0f);//设置点的颜色
glVertex2f(-0.2f,-0.2f);
glColor3f(0.0f,0.6f,0.6f);//设置点的颜色
glVertex2f(-0.2f,0.1f);
}
glEnd();//结束绘制
glBegin(GL_POLYGON);//开始绘制 GL_POLYGON 多边形
{
glColor3f(0.6f,0.0f,0.0f);//设置点的颜色
glVertex2f(0.2f,0.1f);//设置点的位置
glColor3f(0.0f,0.0f,0.6f);//设置点的颜色
glVertex2f(0.5f,0.4f);
glColor3f(0.0f,0.6f,0.0f);//设置点的颜色
glVertex2f(0.3f,-0.4f);
glColor3f(0.0f,0.6f,0.6f);//设置点的颜色
glVertex2f(0.0f,-0.2f);
glColor3f(0.6f,0.6f,0.6f);//设置点的颜色
glVertex2f(-0.1f,-0.1f);
}
glEnd();//结束绘制
glFlush();//提交绘图命令
glutSwapBuffers();//交换前台缓冲与后台缓冲(GLUT_DOUBLE双缓冲模式需要)
}
//第一个参数是命令的个数,第二个参数是命令内容
int main(int argc,char** argv)
{
std::cout<<argc<<std::endl;//输出命令个数
for(int i = 0; i < argc; ++i)//输出命令内容
{
std::cout<<argv[i]<<std::endl;
}
glutInit(&argc,argv);//初始化glut库(创建窗口需要)
glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE);//初始化显示模式 GLUT_RGBA 颜色 GLUT_DOUBLE 双缓冲
glutInitWindowPosition(100,100);//初始化我们创建的窗口在屏幕左上角的位置
glutInitWindowSize(600,600);//初始化创建窗口的宽高
int iWindowID = glutCreateWindow("OpenGL");//创建窗口,并返回窗口的ID,传窗口的标题
glutDisplayFunc(DisplayFunc);//屏幕显示的回调函数
glEnable(GL_LINE_STIPPLE);//开启画虚线的模式
glClearColor(0.0f,0.6f,0.6f,1.0f);//指定屏幕背景色,最后参数为透明度
glutMainLoop();//消息主循环
//glutDestroyWindow(iWindowID);//销毁窗口
return 1;
}
//运行效果