OPENGL入门——第一个例子的讲解
2011-11-14 19:22
375 查看
在这个部分我们将在我们的程序里建立一个main函数,这个main函数将完成必须的初始化和开启事件处理循环。所有的GLUT函数都有glut前缀并且那些完成一些初始化的函数有glutInit前缀。你首先要做的是调用函数glutInit()。 Void glutInit(int*argc,char**argv); 参数: Argc:一个指针,指向从main()函数传递过来的没更改的argc变量。 Argv:一个指针,指向从main()函数传递过来的没更改的argv变量。
在初始化GLUT后,我们开始定义我们的窗口。首先确定窗口位置(它默认的是屏幕左上角),我们使用函数glutInitWindowPosition()。 Void glutInitWindowPositon(int x,int y); 参数: X: 距离屏幕左边的像素数。-1是默认值,意思就是由窗口管理程序决定窗口出现在哪里。如果不使用默认值,那你就自己设置一个值。 Y:距离屏幕上边的像素数。和X一样。 注意,参数仅仅是对窗口管理程序的一个建议。尽管你精心的设置了窗口位置,window返回的可能是不同的位置。如果你设置了,一般会得到你想要的结果。
接下来我们设置窗口大小,使用函数glutInitWindowSize()。 Void glutInitWindowSize(int width,int height); 参数: Width:窗口的宽度。 Height:窗口的高度。 同样width,height也只是一个参考数字。避免使用负数。 接下来。你应该使用函数glutInitDisplayMode()定义显示方式。 Void glutInitDisplayMode(unsighed int mode) 参数: Mode――可以指定下列显示模式 Mode参数是一个GLUT库里预定义的可能的布尔组合。你使用mode去指定颜色模式,数量和缓冲区类型。 指定颜色模式的预定义常量有: 1:GLUT_RGBA或者GLUT_RGB。指定一个RGBA窗口,这是一个默认的颜色模式。 2:GLUT_INDEX。指定颜色索引模式。 这个显示模式还允许你选择单缓冲区或双缓冲区窗口。 1:GLUT_SINGLE.单缓冲区窗口。 2:GLUT_BUFFER.双缓冲区窗口,这是产生流畅动画必须选的。 还可以指定更多,如果你想指定一组特殊的缓冲的话,用下面的变量: 1 GLUT_ACCUM.累积缓冲区。 2:GLUT_STENCIL.模板缓冲区。 3:GLUT_DEPTH.深度缓冲区。 假定你想要一个有单缓冲区,深度缓冲区的RGB窗口,你用“或“(|)操作符来建立你想要的显示模式。 ……………. glutInitDisplayMode(GLUT_RGB|GLUT_SINGLE|GLUT|DEPTH); ……………. 经过上面的这些步骤后,就可以调用函数glutCreateWindow()来创建窗口了。 glutCreateWindow(char* title); 参数: Title:设置窗口的标题。 glutCreateWindow()的返回值是一个窗口标识符。后面你可以在GLUT里使用这个标识符,不过这个超出了本小节的范围。 现在就有一些代码来完成所有的初始化操作。 #include<gl/glut.h> void main(int argc,char**argv) { glutInit(&argc,argv); glutInitDisplayMode(GLUT_DEPTH|GLUT_SINGLE|GLUT_RGBA); glutInitWindowPosition(100,100); glutInitWindowSize(320,320); glutCreateWindow(“GLUT Tutorial”); } 如果你运行上述代码,你将会得到一个空的黑的控制台窗口,而没有OpenGL窗口。并且控制台窗口将很快消失。 在我们渲染一些东西前,还有两件事需要处理。第一告诉GLUT哪个函数负责渲染。我们创建一个简单的渲染的函数。下面的这个函数将会清除颜色缓冲区并画一个三角形。 ... void renderScene(void) { glClear(GL_COLOR_BUFFER_BIT); glBegin(GL_TRIANGLES); glVertex3f(-0.5,-0.5,0.0); glVertex3f(0.5,0.0,0.0); glVertex3f(0.0,0.5,0.0); glEnd(); glFlush(); } 上面的函数的名字你可以自己取一个。
现在你必须告诉GLUT使用我们上面的函数来进行渲染。这个叫寄存回调。。让我们告诉GLUT这个函数renderScene应该被使用。当需要重画的时候GLUT有一个只传递一个函数名称参数的函数(以函数名为形参的函数)就会被调用。 void glutDisplayFunc(void (*func)(void)); 参数: func: 当窗口需要被重绘是调用的函数的名称。注意使用NULL作为实参是错误的。
最后一件事是告诉GLUT我们准备进入应用程序事件处理循环。
GLUT提供了一个函数让程序进入一个永不结束的循环。一直等待处理下一个事件。函数是glutMainLoop()。 void glutMainLoop(void) 到此为止所有的代码都列在下面。如果你运行代码,将会得到一个控制台窗口,和一个画着一个白色三角形的OpenGL窗口,出现在你设置的位置,并有着你设置的尺寸。 #include <GL/glut.h> void renderScene(void) { glClear(GL_COLOR_BUFFER_BIT); glBegin(GL_TRIANGLES); glVertex3f(-0.5,-0.5,0.0); glVertex3f(0.5,0.0,0.0); glVertex3f(0.0,0.5,0.0); glEnd(); glFlush(); } void main(int argc, char **argv) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_DEPTH | GLUT_SINGLE | GLUT_RGBA); glutInitWindowPosition(100,100); glutInitWindowSize(320,320); glutCreateWindow("3D Tech- GLUT Tutorial"); glutDisplayFunc(renderScene); glutMainLoop(); }
相关文章推荐
- Hibernate入门学习(3)----第一个Hibernate例子
- BootStrap入门_创建第一个例子
- hibernate入门之环境准备,以及第一个例子。
- Spring.Net学习笔记一——入门、第一个例子
- Lucene第一个入门学习例子
- struts2入门-第一个例子==》第一个struts2实例——HelloWorld==》Struts2.0搭建和简单实例==>写一个Steuts2的经典入门案例,做了一个登陆程序作为入门例子
- OpenGL编程轻松入门之一个简单的例子
- Struts2入门--第一个例子
- 《JSF教程》-03 环境搭建与第一个入门例子
- Hibernate 入门第四课 第一个小例子
- OpenGL红宝书第一个例子:绘制两个三角形
- HttpClient4.1入门教程-利用官方例子讲解httpClient4.1的用法
- OpenGL编程轻松入门之一个简单的例子
- Solr入门之(2)快速启动:第一个例子
- HttpClient4.1入门教程-利用官方例子讲解httpClient4.1的用法
- V4L2采集图像入门例子讲解
- 第一个Struts入门例子
- Asp.net 和 Comet 开发入门, 第一个例子
- shell 入门例子讲解
- [C++学习历程]中级部分 OpenGL第一个例子实现