OpenGL关于glBegin的参数的理解

来源:互联网 发布:linux重启tomcat服务 编辑:程序博客网 时间:2024/05/17 22:53
#include<GL/glut.h>
#include<iostream>
using namespace std;

void init()
{
glClearColor(0.0, 0.0, 0.0, 0.0);

glMatrixMode(GL_PROJECTION);
glClear(GL_COLOR_BUFFER_BIT);
gluOrtho2D(0.0,200.0,0.0,200.0);
}


void display1()


glColor3f(1.0, 1.0, 1.0);
glBegin(GL_LINES);
/*绘制一系列的非连接直线段。两点确定一条直线*/
glVertex2f(20.0, 100.0);/*v0*/
glVertex2f(100.0, 150.0);/*v1*/
glColor3f(1.0, 0.0, 0.0);
glVertex2f(100.0, 120.0);/*v2*/
glVertex2f(180.0, 100.0);/*v3*/
glColor3f(0.0, 1.0, 0.0);
glVertex2f(40.0, 80.0);/*v4*/
glVertex2f(180.0, 30.0);/*v5*/
glColor3f(0.0, 0.0, 1.0);
glVertex2f(50.0, 50.0);/*v6*/
glVertex2f(160.0, 80.0);/*v7*/
glEnd();
glFlush();


}


void display2()
{


glColor3f(1.0, 1.0, 1.0);
glBegin(GL_LINE_STRIP);
/*绘制一系列连接的直线段。从起始点到终止点。不形成环路*/
glVertex2f(20.0, 100.0);/*v0*/
glVertex2f(100.0, 150.0);/*v1*/
glColor3f(1.0, 0.0, 0.0);
glVertex2f(100.0, 120.0);/*v2*/
glVertex2f(180.0, 100.0);/*v3*/
glColor3f(0.0, 1.0, 0.0);
glVertex2f(40.0, 80.0);/*v4*/
glVertex2f(180.0, 30.0);/*v5*/
glColor3f(0.0, 0.0, 1.0);
glVertex2f(50.0, 50.0);/*v6*/
glVertex2f(160.0, 80.0);/*v7*/
glEnd();
glFlush();


}
void display3()
{


glColor3f(1.0, 1.0, 1.0);
glBegin(GL_LINE_LOOP);
/*绘制一系列连接的直线段。从起始点到终止点。形成环路*/
glVertex2f(20.0, 100.0);/*v0*/
glVertex2f(100.0, 150.0);/*v1*/
glColor3f(1.0, 0.0, 0.0);
glVertex2f(100.0, 120.0);/*v2*/
glVertex2f(180.0, 100.0);/*v3*/
glColor3f(0.0, 1.0, 0.0);
glVertex2f(40.0, 80.0);/*v4*/
glVertex2f(180.0, 30.0);/*v5*/
glColor3f(0.0, 0.0, 1.0);
glVertex2f(50.0, 50.0);/*v6*/
glVertex2f(160.0, 80.0);/*v7*/
glEnd();
glFlush();


}
void display4()
{


glColor3f(1.0, 1.0, 1.0);
glBegin(GL_TRIANGLES);
/* 绘制一系列三角形区域(三条边的多边形),第一个三角形使用v0,v1.v2,第二个三角形受用v3,v4,v5,接下来以此类推。如果n不是3的倍数,则最后1个或2个顶点被忽略*/
glVertex2f(20.0, 100.0);/*v0*/
glVertex2f(100.0, 150.0);/*v1*/
glColor3f(1.0, 0.0, 0.0);
glVertex2f(100.0, 120.0);/*v2*/
glVertex2f(180.0, 100.0);/*v3*/
glColor3f(0.0, 1.0, 0.0);
glVertex2f(40.0, 80.0);/*v4*/
glVertex2f(180.0, 30.0);/*v5*/
glColor3f(0.0, 0.0, 1.0);
glVertex2f(50.0, 50.0);/*v6*/
glVertex2f(160.0, 80.0);/*v7*/
glEnd();
glFlush();


}
void display5()
{


glColor3f(1.0, 1.0, 1.0);
glBegin(GL_TRIANGLE_STRIP);
/* 绘制一系列三角形区域。第一个三角形使用定点v0,v1,v2第二个三角形使用v2,v1,v3,然后是v2,v3,v4接下来以此类推。
* 这个顺序是为了保证所有的三角形都是按照相同的方向绘制的,使这个三角形串都是按照相同的方向绘制的,形成表面的
* 一部分。对于有些操作,维持方向是非常重要的,例如剔除。n至少大于3,否则就不会绘制任何三角形。*/
glVertex2f(20.0, 100.0);/*v0*/
glVertex2f(100.0, 150.0);/*v1*/
glColor3f(1.0, 0.0, 0.0);
glVertex2f(100.0, 120.0);/*v2*/
glVertex2f(180.0, 100.0);/*v3*/
glColor3f(0.0, 1.0, 0.0);
glVertex2f(40.0, 80.0);/*v4*/
glVertex2f(180.0, 30.0);/*v5*/
glColor3f(0.0, 0.0, 1.0);
glVertex2f(50.0, 50.0);/*v6*/
glVertex2f(160.0, 80.0);/*v7*/
glEnd();
glFlush();


}
void display6()
{


glColor3f(1.0, 1.0, 1.0);
glBegin(GL_TRIANGLE_FAN);
/*和GL_TRIANGLE_STRIP相似,只是顶点顺序现在是v0.v1,v2接着是v0,v2,v3再接着是v0,v3,v4*/
glVertex2f(20.0, 100.0);/*v0*/
glVertex2f(100.0, 150.0);/*v1*/
glColor3f(1.0, 0.0, 0.0);
glVertex2f(100.0, 120.0);/*v2*/
glVertex2f(180.0, 100.0);/*v3*/
glColor3f(0.0, 1.0, 0.0);
glVertex2f(40.0, 80.0);/*v4*/
glVertex2f(180.0, 30.0);/*v5*/
glColor3f(0.0, 0.0, 1.0);
glVertex2f(50.0, 50.0);/*v6*/
glVertex2f(160.0, 80.0);/*v7*/
glEnd();
glFlush();


}
void display7()
{


glColor3f(1.0, 1.0, 1.0);
glBegin(GL_QUADS);
/*绘制一系列的四边形(4条边的多边形),首先使用v0,v1,v2,v3然后是v4,v5,v6,v7接下来以此类推,如果n不是4的整数倍,舍去*/
glVertex2f(20.0, 100.0);/*v0*/
glVertex2f(100.0, 150.0);/*v1*/
glColor3f(1.0, 0.0, 0.0);
glVertex2f(100.0, 120.0);/*v2*/
glVertex2f(180.0, 100.0);/*v3*/
glColor3f(0.0, 1.0, 0.0);
glVertex2f(40.0, 80.0);/*v4*/
glVertex2f(180.0, 30.0);/*v5*/
glColor3f(0.0, 0.0, 1.0);
glVertex2f(50.0, 50.0);/*v6*/
glVertex2f(160.0, 80.0);/*v7*/
glEnd();
glFlush();




}
void display8()
{


glColor3f(1.0, 1.0, 1.0);
glBegin(GL_QUAD_STRIP);
/* 绘制一系列的四边形(4条边的多边形)。首先使用v0,v1,v3,v2.接着是v2,v3,v5,v4,然后是v4,v5,v7,v6接下来以此类推。n至少大于4
* 否则不会绘制任何4边形。如果n是奇数,最后一个顶点将被忽略 */
glVertex2f(20.0, 100.0);/*v0*/
glVertex2f(100.0, 150.0);/*v1*/
glColor3f(1.0, 0.0, 0.0);
glVertex2f(100.0, 120.0);/*v2*/
glVertex2f(180.0, 100.0);/*v3*/
glColor3f(0.0, 1.0, 0.0);
glVertex2f(40.0, 80.0);/*v4*/
glVertex2f(180.0, 30.0);/*v5*/
glColor3f(0.0, 0.0, 1.0);
glVertex2f(50.0, 50.0);/*v6*/
glVertex2f(160.0, 80.0);/*v7*/
glEnd();
glFlush();


}
void display9()
{


glColor3f(1.0, 1.0, 1.0);
glBegin(GL_POLYGON);
/*绘制一个多边形,使用v1,v2...vn作为顶点。n必须大于等于3,否则就不会绘制任何多边形。另外,它所指定的多边形本身不得相交并且
* 必须是凸多边形。如果顶点不满足这些条件,其结果是不可预测的*/
glVertex2f(20.0, 100.0);/*v0*/
glVertex2f(100.0, 150.0);/*v1*/
glColor3f(1.0, 0.0, 0.0);
glVertex2f(100.0, 120.0);/*v2*/
glVertex2f(180.0, 100.0);/*v3*/
glColor3f(0.0, 1.0, 0.0);
glVertex2f(40.0, 80.0);/*v4*/
glVertex2f(180.0, 30.0);/*v5*/
glColor3f(0.0, 0.0, 1.0);
glVertex2f(50.0, 50.0);/*v6*/
glVertex2f(160.0, 80.0);/*v7*/
glEnd();
glFlush();


}




void reshape(GLint w,GLint h)
{
glViewport(0, 0, (GLsizei)w, (GLsizei)h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(0.0, (GLdouble)w, 0.0, (GLdouble)h);
}


void main(int argc,char** argv)
{
int i;
cout << "1.GL_LINES\n"
<< "2.GL_LINE_STRIP\n"
<< "3.GL_LINE_LOOP\n"
<< "4.GL_TRIANGLES\n"
<< "5.GL_TRIANGLE_STRIP\n"
<< "6.GL_TRIANGLE_FAN\n"
<< "7.GL_QUADS\n"
<< "8.GL_QUAD_STRIP\n"
<< "9.GL_POLYGON\n"
<< "What do you want...\n" << endl;
cin >> i;
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
glutInitWindowSize(400, 300);
glutInitWindowPosition(100, 100);
glutCreateWindow(argv[0]);
init();
switch (i)
{

case 1:
glutDisplayFunc(display1);
break;
case 2:
glutDisplayFunc(display2);
break;
case 3:
glutDisplayFunc(display3);
break;
case 4:
glutDisplayFunc(display4);
break;
case 5:
glutDisplayFunc(display5);
break;
case 6:
glutDisplayFunc(display6);
case 7:
glutDisplayFunc(display7);
case 8:
glutDisplayFunc(display8);
break;
case 9:
glutDisplayFunc(display9);
break;
default:
break;
}


glutReshapeFunc(reshape);
glutMainLoop();
}
0 0
原创粉丝点击