opengl画几何图形

#include 
#include 
/*
几何图元类型和说明
  类型 说明
  GL_POINTS 单个顶点集
  GL_LINES 多组双顶点线段
  GL_POLYGON 单个简单填充凸多边形
  GL_TRIANGLES 多组独立填充三角形
  GL_QUADS 多组独立填充四边形
  GL_LINE_STRIP 不闭合折线
  GL_LINE_LOOP 闭合折线
  GL_TRIANGLE_STRIP 线型连续填充三角形串
  GL_TRIANGLE_FAN 扇形连续填充三角形串
  GL_QUAD_STRIP 连续填充四边形串
*/
void display(void)
{
	const int n = 12;
	const GLfloat R = 0.5f;
	const GLfloat Pi = 3.1415926536f;

	glClear(GL_COLOR_BUFFER_BIT);
	glBegin(GL_POLYGON);
    //glBegin和glEnd函数限定了一组或多组图元的定点定义。
	//glBegin(GL_LINE_STRIP);
	//glBegin(GL_QUADS);
	//glBegin(GL_QUAD_STRIP);
	//glBegin(GL_POINTS);
	//glBegin(GL_LINE_LOOP);
	//glBegin(GL_TRIANGLES);
	//glBegin(GL_TRIANGLE_FAN);
	//glBegin(GL_TRIANGLE_STRIP);
	for (int i = 0; i < n; ++i)
		glVertex2f(R*cos(2 * Pi / n*i), R*sin(2 * Pi / n*i));
	//glVertex 开头指定点
	glEnd();
	glFlush();
}

int main(int argc, char *argv[])

{

	glutInit(&argc, argv);//初始化OpenGL Utility Toolkit

	glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);
	//设置显示模式GLUT_RGB表示使用RGB颜色,GLUT_INDEX(表示使用索引颜色)。
	//UT_SINGLE表示使用单缓冲,GLUT_DOUBLE(使用双缓冲)
	glutInitWindowPosition(100, 100);
	//设置窗口在屏幕中的位置
	glutInitWindowSize(400, 400);
	//设置窗口的大小。
	glutCreateWindow("画几何图形");
	//根据前面设置的信息创建窗口。参数将被作为窗口的标题。
	//窗口被创建后,并不立即显示到屏幕上。需要调用glutMainLoop才能看到窗口。
	glutDisplayFunc(&display);
	//注册一个绘图函数
	glutMainLoop();
	//进入GLUT事件处理循环,让所有的与“事件”有关的函数调用无限循环。
	return 0;

}

GL_POLYGON

opengl画几何图形_第1张图片

GL_LINE_STRIP

opengl画几何图形_第2张图片

GL_QUADS

opengl画几何图形_第3张图片

GL_QUAD_STRIP

opengl画几何图形_第4张图片

GL_POINTS

opengl画几何图形_第5张图片

GL_LINE_LOOP

opengl画几何图形_第6张图片

GL_TRIANGLES

opengl画几何图形_第7张图片

GL_TRIANGLE_FAN

opengl画几何图形_第8张图片

GL_TRIANGLE_STRIP

opengl画几何图形_第9张图片

 

#include 
#include 

void display(void)
{
	const GLfloat factor = 0.1f;
	/*
	glColor3f(0.0, 0.0, 0.0);  --> 黑色
	glColor3f(1.0, 0.0, 0.0);  --> 红色
	glColor3f(0.0, 1.0, 0.0);  --> 绿色
	glColor3f(0.0, 0.0, 1.0);  --> 蓝色
	glColor3f(1.0, 1.0, 0.0);  --> 黄色
	glColor3f(1.0, 0.0, 1.0);  --> 品红色
	glColor3f(0.0, 1.0, 1.0);  --> 青色
	glColor3f(1.0, 1.0, 1.0);  --> 白色
	*/
	GLfloat x;
	glClear(GL_COLOR_BUFFER_BIT);
	glBegin(GL_LINES);
	glColor3f(0.0f, 0.0f, 1.0f); 
	glVertex2f(-1.0f, 0.0f);
	glVertex2f(1.0f, 0.0f);//画x轴
	glVertex2f(0.0f, -1.0f);
	glVertex2f(0.0f, 1.0f);//画y轴
	glEnd();

	glBegin(GL_LINE_STRIP);
	glColor3f(1.0f, 0.0f, 0.0f);
	for (x = -1.0f / factor; x < 1.0f / factor; x += 0.01f)
		glVertex2f(x*factor, sin(x)*factor);
	glEnd();
	glBegin(GL_POINTS);
	glColor3f(1.0, 1.0, 0.0);  //黄色
	glColor3f(0.0, 1.0, 0.0);  //绿色  //连续调用,最后的起作用
  
	glVertex2f(0.25, 0.75);
	glEnd();
	glFlush();

}

int main(int argc, char *argv[])
{
	glutInit(&argc, argv);//初始化OpenGL Utility Toolkit
	glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);
	//设置显示模式GLUT_RGB表示使用RGB颜色,GLUT_INDEX(表示使用索引颜色)。
	//UT_SINGLE表示使用单缓冲,GLUT_DOUBLE(使用双缓冲)
	glutInitWindowPosition(100, 100);
	//设置窗口在屏幕中的位置
	glutInitWindowSize(400, 400);
	//设置窗口的大小。
	glutCreateWindow("画几何图形");
	//根据前面设置的信息创建窗口。参数将被作为窗口的标题。
	//窗口被创建后,并不立即显示到屏幕上。需要调用glutMainLoop才能看到窗口。
	glutDisplayFunc(&display);
	//注册一个绘图函数
	glutMainLoop();
	//进入GLUT事件处理循环,让所有的与“事件”有关的函数调用无限循环。
	return 0;
}

opengl画几何图形_第10张图片

//花点
void display(void)
{
	glClear(GL_COLOR_BUFFER_BIT);
	glPointSize(10.0f);
	glColor3f(0.0f, 1.0f, 0.0f);
	glBegin(GL_POINTS);
	glColor3f(1.0f, 0.0f, 0.0f);//里面的起作用,外面的被屏蔽
	glPointSize(1.0f);//里面的没法起作用,外面的起作用???
	glVertex2f(0.0f, 0.0f);
	glVertex2f(0.5f, 0.5f);
	glEnd();
	glFlush();
}

opengl画几何图形_第11张图片

void display(void)
{
	const int n = 12;
	const GLfloat R = 0.5f;
	const GLfloat Pi = 3.1415926536f;
	glColor3f(1.0f, 0.0f, 0.0f);
	glLineWidth(5.0f);//直线的宽度
	//画虚线
	glEnable(GL_LINE_STIPPLE);//启动画虚线
	glLineStipple(2, 0x00FF);
	glClear(GL_COLOR_BUFFER_BIT);
	glBegin(GL_LINE_LOOP);
	//glLineWidth(5.0f);//直线的宽度,不起作用

	for (int i = 0; i < n; ++i)
		glVertex2f(R*cos(2 * Pi / n*i), R*sin(2 * Pi / n*i));
	glEnd();
	glBegin(GL_LINES);
	//glLineWidth(5.0f); 不起作用
	glVertex2f(0.0f, 0.0f);
	glVertex2f(0.5f, 0.5f);
	glEnd();

	glFlush();
}

opengl画几何图形_第12张图片

 

//多边形的两面以及绘制方式
void display(void)
{
	glClear(GL_COLOR_BUFFER_BIT);
	glPolygonMode(GL_FRONT, GL_FILL);//正面为填充模式
	glPolygonMode(GL_BACK, GL_LINE);//反面为线性模式
	glFrontFace(GL_CCW);//CounterClockWise,设置逆时针为正面。

	glBegin(GL_POLYGON);//逆时针绘制一个正方形。左下方
	glVertex2f(-0.5f, -0.5f);
	glVertex2f(0.0f, -0.5f);
	glVertex2f(0.0f, 0.0f);
	glVertex2f(-0.5f, 0.0f);
	glEnd();

	glBegin(GL_POLYGON);//顺时针绘制一个正方形,在右上方
	glVertex2f(0.0f, 0.0f);
	glVertex2f(0.0f, 0.5f);
	glVertex2f(0.5f, 0.5f);
	glVertex2f(0.5f, 0.0f);
	glEnd();
	glFlush();
}

opengl画几何图形_第13张图片

改成glFrontFace(GL_CW);即顺时针为正面

opengl画几何图形_第14张图片

void display(void)
{
	glClear(GL_COLOR_BUFFER_BIT);
	glPointSize(5.0f);
	glColor3f(1.0f, 0.0f, 0.0f);
	//glPolygonMode(GL_FRONT, GL_FILL);//正面为填充模式
	//glPolygonMode(GL_BACK, GL_LINE);//反面为线性模式
	glPolygonMode(GL_FRONT_AND_BACK, GL_POINT); 
	// 设置两面均为顶点绘制方式
	glFrontFace(GL_CW);//CounterClockWise,设置逆时针为正面。

	glBegin(GL_POLYGON);//逆时针绘制一个正方形。左下方
	glVertex2f(-0.5f, -0.5f);
	glVertex2f(0.0f, -0.5f);
	glVertex2f(0.0f, 0.0f);
	glVertex2f(-0.5f, 0.0f);
	glEnd();

	glBegin(GL_POLYGON);//顺时针绘制一个正方形,在右上方
	glVertex2f(0.0f, 0.0f);
	glVertex2f(0.0f, 0.5f);
	glVertex2f(0.5f, 0.5f);
	glVertex2f(0.5f, 0.0f);
	glEnd();
	glFlush();
}

opengl画几何图形_第15张图片


 

你可能感兴趣的:(opengl)