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(200, 200);
25 glutInitWindowSize(500, 500);
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 阅读(1743)
评论(0) 编辑 收藏 引用 所属分类:
OpenCV / OpenGL