glBegin()使用小结

 

在glBegin()和glEnd()之间可调用的函数

函数 函数意义
glVertex*() 设置顶点坐标
glColor*() 设置当前颜色
glIndex*() 设置当前颜色表
glNormal*() 设置法向坐标
glCoord*() 产生坐标
glCallList(),glCallLists() 执行显示列表
glTexCoord*() 设置纹理坐标
glEdgeFlag*() 控制边界绘制
glMaterial*() 设置材质

glVertex3f()表示了该函数属于 gl库,参数是三个float型参数指针。我们用glVertex*()来表示这一类函数。

几何图元类型和说明

类型 说明
GL_POINTS 单个顶点集
GL_LINES 多组双顶点线段
GL_POLYGON 单个简单填充凸多边形
GL_TRAINGLES  多组独立填充三角形
GL_QUADS 多组独立填充四边形
GL_LINE_STRIP 不闭合折线
GL_LINE_LOOP 闭合折线
GL_TRAINGLE_STRIP 线型连续填充三角形串
GL_TRAINGLE_FAN 扇形连续填充三角形串
GL_QUAD_STRIP 连续填充四边形串


 
 实例如下所示:

// OpenGLDemo.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <GL/glut.h>
#include <math.h>
const int n = 1000;
const GLfloat R = 0.5f;
const GLfloat Pi = 3.1415926536f;
const GLfloat factor = 0.1f;
void myDisplay(void)

{
///第一个程序----矩形
//glClear(GL_COLOR_BUFFER_BIT);
//glRectf(-0.5f, -0.5f, 0.5f, 0.5f);
//glFlush();

///第二个程序----圆
//int i;
//glClear(GL_COLOR_BUFFER_BIT);
//glBegin(GL_POLYGON);//有顶点就必须要有glBegin() glEnd();
//for(i=0; i<n; ++i)
// glVertex2f(R*cos(2*Pi/n*i), R*sin(2*Pi/n*i));
//glEnd();
//glFlush();

///第三个程序---五星
GLfloat a = 1 / (2-2*cos(72*Pi/180));
GLfloat bx = a * cos(18 * Pi/180);
GLfloat by = a * sin(18 * Pi/180);
GLfloat cy = -a * cos(18 * Pi/180);
GLfloat
PointA[2] = { 0, a },
PointB[2] = { bx, by },
PointC[2] = { 0.5, cy },
PointD[2] = { -0.5, cy },
PointE[2] = { -bx, by };

glClear(GL_COLOR_BUFFER_BIT);
// 按照A->C->E->B->D->A的顺序,将五角星画出
glBegin(GL_LINE_LOOP);//闭合折线
glVertex2fv(PointA);
glVertex2fv(PointC);
glVertex2fv(PointE);
glVertex2fv(PointB);
glVertex2fv(PointD);
glEnd();
glFlush();

///第四个程序----画出正弦函数图形
//GLfloat x;
//glClear(GL_COLOR_BUFFER_BIT);
//glBegin(GL_LINES);
//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);
//for(x=-1.0f/factor; x<1.0f/factor; x+=0.01f)
//{
// glVertex2f(x*factor, sin(x)*factor);
//}
//glEnd();
//glFlush();

}

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

{

glutInit(&argc, argv);

glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);

glutInitWindowPosition(100, 100);

glutInitWindowSize(400, 400);

glutCreateWindow("第一个OpenGL程序");

glutDisplayFunc(&myDisplay);

glutMainLoop();

return 0;

}

效果图如下所示:

 
 
 
 
 
 

posted @ 2012-01-03 09:53  叶梅树  阅读(13277)  评论(0编辑  收藏  举报