您的位置:首页 > 运维架构

OpenGL关于glBegin的参数的理解

2015-07-28 20:28 549 查看
#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();

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: