随笔-145  评论-173  文章-70  trackbacks-0
 1#include <GL/glut.h>
 2#include <math.h>
 3const int n = 200;
 4const GLfloat R = 0.5f;
 5const GLfloat Pi = 3.1415926536f;
 6
 7void myDisplay(void)
 8{
 9    int i;
10    glClear(GL_COLOR_BUFFER_BIT);
11    glBegin(GL_POLYGON);
12    for(i=0; i<n; ++i)
13        glVertex2f(R*cos(2*Pi/n*i), R*sin(2*Pi/n*i));
14    glEnd();
15    glFlush();
16}

17
18
19
20int main(int argc, char *argv[])
21{
22    glutInit(&argc, argv);
23    glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);
24    glutInitWindowPosition(200200);
25    glutInitWindowSize(500500);
26    glutCreateWindow("第一个OpenGL程序");
27    glutDisplayFunc(&myDisplay);
28    glutMainLoop();
29    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 阅读(1730) 评论(0)  编辑 收藏 引用 所属分类: OpenCV / OpenGL

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理