1 #include <GL/glut.h>
#include <GL/glut.h>
 2 #include <math.h>
#include <math.h>
 3 const int n = 200;
const int n = 200;
 4 const GLfloat R = 0.5f;
const GLfloat R = 0.5f;
 5 const GLfloat Pi = 3.1415926536f;
const GLfloat Pi = 3.1415926536f;
 6
 7 void myDisplay(void)
void myDisplay(void)
 8

 {
{
 9 int i;
    int i;
10 glClear(GL_COLOR_BUFFER_BIT);
    glClear(GL_COLOR_BUFFER_BIT);
11 glBegin(GL_POLYGON);
    glBegin(GL_POLYGON);
12 for(i=0; i<n; ++i)
    for(i=0; i<n; ++i)
13 glVertex2f(R*cos(2*Pi/n*i), R*sin(2*Pi/n*i));
        glVertex2f(R*cos(2*Pi/n*i), R*sin(2*Pi/n*i));
14 glEnd();
    glEnd();
15 glFlush();
    glFlush();
16 }
}
17
18
19
20 int main(int argc, char *argv[])
int main(int argc, char *argv[])
21

 {
{
22 glutInit(&argc, argv);
    glutInit(&argc, argv);
23 glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);
    glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);
24 glutInitWindowPosition(200, 200);
    glutInitWindowPosition(200, 200);
25 glutInitWindowSize(500, 500);
    glutInitWindowSize(500, 500);
26 glutCreateWindow("第一个OpenGL程序");
    glutCreateWindow("第一个OpenGL程序");
27 glutDisplayFunc(&myDisplay);
    glutDisplayFunc(&myDisplay);
28 glutMainLoop();
    glutMainLoop();
29 return 0;
    return 0;
30 }
}
31
 
先来看看上面的代码,本程序是在win32 console application,即控制台程序,所以会出现命令行对话框。现在的问题是,这个程序的各个部分到底是什么意思。
那么,我就逐个来讲述吧。
首先从main函数入口进入,其中main函数的两个参数就是命令行形参,然后对于#include <GL/glut.h>,这个是包括的一个glut的头文件,里面定义了很多函数,在运行该程序之前,需要将VC中的相关环境设置好。这里略说。
看看第一个函数,从glutInit可以看到就是一个初始化,不错,这个函数的作用就是初始化窗口背景,对于一个程序,在开始运行的时候的初始化工作的重要性,可想而知了,必要而且必须!
1.绘制图形的步骤。所有的图形都应该在glBegin()和glEnd()中绘制,否则
会默认为为没有绘制的。
glBegin(GL_LINES);
 glVertex2f(0.0f, 0.0f);
 glVertex2f(2.0f,8.0f);
glEnd();
其次,glBegin()函数的模式,可以选择
GL_POINTS,GL_LINES,GL_POLYGON,GL_LINE_LOOP
对于各种模式的说明:
GL_POINTS:绘制的是点,也就是单个的点,这样显示的时候不会看到。
GL_LINES:绘制的是一条直线,注意点的坐标一定要在绘制的范围内,否
则的话会看不到的,我曾经做过,没有显示,还以为错了……
GL_POLYGON:显示的是一个多边形,比如在其中绘制了三个点,那么以
这种模式显示的话就是一个填充的三角形,为何,因为相当于连接这三个点
形成一个多边形的来填充。
GL_LINE_LOOP:绘制出来的点将做到首尾相连,试想,如果不是用的这个
而是直接用line的话,那么就要手动连接,即在最后一个点的是很放一个首
节点连起来。
GL_LINE_STRIP:连起来的是一整条的。区别:与line不同,连接的是line 
的话中间有间隔点就不会连起来,而用这个的话会把相邻的点连起来。
2.坐标为原点的在正中间。画出来的,看的。
3.画出来的图形是一样:
void myDisplay(void)
{
 GLfloat x;
 int i;
 glClear(GL_COLOR_BUFFER_BIT);
 glBegin(GL_LINES);
  glVertex2f(0.0f, 0.0f);
  glVertex2f(-0.123f,-0.423f);
  glVertex2f(0.53f, 0.98f);
  glVertex2f(0.0f, 0.0f);
  glVertex2f(-0.123f,-0.423f);
  glVertex2f(0.53f, 0.98f);
 glEnd();
 glFlush();
}
绘制顺序的是每两个点就做出来一条直线。
void myDisplay(void)
{
 GLfloat x;
 int i;
 glClear(GL_COLOR_BUFFER_BIT);
 glBegin(GL_LINE_LOOP);
  glVertex2f(0.0f, 0.0f);
  glVertex2f(-0.123f,-0.423f);
  glVertex2f(0.53f, 0.98f);
 glEnd();
 glFlush();
}
绘制的时候就是对于这三个点首尾相连。绘制的时候对于各个点依次联系,
然后依次连起来,并最终结尾首尾,不管有几个点。
4. glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE)
初始化显示的模式,第一个参数显示的是以RGB模式,后者是指单缓冲区。
详细的后面学习中再遇到。
glutInitWindowPosition(200, 200); //初始化窗口的位置,一个点的坐
标
glutInitWindowSize(500, 500);  //窗口的大小,长和宽
glutCreateWindow("第一个OpenGL程序");//窗口的名字,title。
5.调用相关的函数实现绘制,特别是对于一个绘制,用的是函数,调用下面
的是传递一个指针。
glutDisplayFunc(&myDisplay);
glutMainLoop();
	posted on 2009-09-27 23:56 
deercoder 阅读(1773) 
评论(0)  编辑 收藏 引用  所属分类: 
OpenCV / OpenGL