OpenGL(五)——创建二维图形

                                 OpenGL(五)——创建二维图形

一、创建一个项目,创建项目的方法可以参考前两篇文章:

Win10+VS2010+OpenGL配置

OpenGL(一)——创建一个四边形

二、创建好项目后,编写二维图形所需的代码:

#include <GLTools.h>
#include <stdio.h>
#include <gl/glew.h>
#include <gl/glut.h>
#include <math.h>

//不显示控制台窗口
#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]),未经作者授权同意,请勿转载。如需获取本程序源代码和资源,欢迎发邮件与我联系。

おすすめ

転載: blog.csdn.net/ifeng12358/article/details/105998456
おすすめ