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();
}
#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();
}
相关文章推荐
- Ubuntu 12.04 安装 Apache2+PHP5+MySQL
- Linux LAMP 搭建
- linux文本文件查看、显示命令 :cat head tail grep more less nl
- linux文本文件查看、显示命令 :cat head tail grep more less nl 分类: Ubuntu学习笔记 2015-07-28 20:25 55人阅读 评论(0) 收藏
- linux udp 单播组播广播实现
- Linux下安装jdk-6u45-linux-x64.bin
- linux scopy
- apache禁止指定user_agent和禁止解析php
- eclipse下安装tomcat以及可能遇到的404问题
- linux中的权限对于文件和目录的重要性
- linux job control学习整理
- Linux find 用法示例
- MYSQL 主主热备高可用方案与实现
- CentOS 6.6 yum 安装 nginx
- centos6.5安装apache2.x并更改默认80port
- kafka环境搭建
- Linux 高级编程之小结(一)
- Shell中脚本变量和函数变量的作用域
- Centos7支持NTFS格式
- Linux route添加静态路由