一、创建一个项目,创建项目的方法可以参考前两篇文章:
Win10+VS2010+OpenGL配置
OpenGL(一)——创建一个四边形
二、创建好项目后,编写二维图形所需的代码:
#include
#include
#include
#include
#include
//不显示控制台窗口
#pragma comment(linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"")
GLfloat r = 0.5f;
GLfloat PI = 3.141592653f;
//说明:glviewport函数来决定视见区域,告诉OpenGL应该把渲染之后图形绘制在窗体的那个部位。
//参数X,Y指定了视见区域的左下角在窗口中的位置,一般情况下为(0,0),Width和Height指定了视见区域的宽度和高度.
void initMyData()
{
glClearColor(0.0, 0.0, 0.0, 0.0);
glColor3f(1.0, 1.0, 1.0);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
//定义裁剪面
gluOrtho2D(-1.0, 1.0, -1.0, 1.0);
}
void myDispaly()
{
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(1.0, 0.0, 0.0);
//画分割线
glViewport(0, 0, 400, 400);
glBegin(GL_LINES);
glVertex2f(-1.0, 0);
glVertex2f(1.0, 0);
glVertex2f(0, 1.0);
glVertex2f(0, -1.0);
glEnd();
//绘制四边形
glColor3f(0.0, 1.0, 0.0);
glViewport(0, 0, 200, 200);
glBegin(GL_POLYGON);
glVertex2f(-0.5, -0.25);
glVertex2f(-0.5, 0.25);
glVertex2f(0.5, 0.25);
glVertex2f(0.5, -0.25);
glEnd();
//绘制三角形
glColor3f(1.0, 0.0, 0.0);
glViewport(200,200,200,200);
glBegin(GL_TRIANGLES);
glVertex2f(-0.5, -0.5);
glVertex2f(0, 0.5);
glVertex2f(0.5, -0.5);
glEnd();
//绘制四边形
glColor3f(1.0, 1.0, 1.0);
glViewport(0, 200, 200, 200);
glBegin(GL_POLYGON);
glVertex2f(-0.5, -0.5);
glVertex2f(-0.5, 0.5);
glVertex2f(0.5, 0.5);
glVertex2f(0.5, -0.5);
glEnd();
//绘制圆形
glColor3f(0.0, 0.0, 1.0);
glViewport(200, 0, 200, 200);
int pre = 30;
glBegin(GL_POLYGON);
for (int i = 0; i < pre; i++){
glVertex2f(r* cos(2*PI*i/pre), r*sin(2*PI*i/pre));
}
glEnd();
glFlush();//刷新缓冲,保证绘图命令能被执行.
}
int main(int argc, char ** argv)
{
glutInit(&argc, argv); //来初始化GLUT库并同窗口系统对话协商
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB); //用来确定所创建窗口的显示模式。本例中的参数GLUT_SINGLE 指定单缓存窗口,\
这也是缺省模式,对应的模式为GLUT_DOUBLE 双缓存窗口。参数GLUT_RGB指定颜色RGBA模式,这也是缺省模式,\
对应的模式为GLUT_INDEX 颜色索引模式窗口。
glutInitWindowPosition(100,100);
glutInitWindowSize(400, 400);
glutCreateWindow("2D windows");
glutDisplayFunc(myDispaly);//册当前窗口的显示回调函数。当一个窗口的图像层需要重新绘制时,GLUT将调用该窗口的的显示回调函数。在此例中的mydisplay就是显示回调函数,\
显示回调函数不带任何参数,它负责整个图像层的绘制。我们的大部分工作将集中在这个函数中。
initMyData();
glutMainLoop();//进入GLUT事件处理循环。glutMainLoop函数在GLUT程序中最多只能调用一次,它一旦被调用就不再返回,\
并且调用注册过的回调函数。所以这个函数必须放在注册回调函数的后面,比如glutReshapeFunc, glutDisplayFunc。
return 0;
}
我们运行一下,看一下效果:
下篇文章:
上篇文章:OpenGL(一)——创建一个四边形
本文原创作者:冯一川([email protected]),未经作者授权同意,请勿转载。如需获取本程序源代码和资源,欢迎发邮件与我联系。