OpenGL实例(1)-创建窗体


     首先,这是在ubuntu下运行的程序.下载opengl图形库花费了不少时间.在windows上,你更应该先下载glut,然后解压出glut.h,glut.dll,glut32.dll放在相应的文件夹内,或者你保证他们每次和你写的opengl文件放在同一个位置.

     我觉得学什么都要运用,否则太困难了,今天先写一个OpenGL入门级的小程序.

     我们新建一个simple.c

#include <GL/glut.h>
#include <stdio.h>
void display()
{
glClear(GL_COLOR_BUFFER_BIT);
//glClearColor//清除颜色
glBegin(GL_POLYGON);
glVertex2f(-0.5,-0.5);
glVertex2f(-0.5,0.5);
glVertex2f(0.5,0.5);
glVertex2f(0.5,-0.5);
glEnd();
glFlush();
}
int main(int argc,char **argv)
{
glutInit(&argc,argv);
glutCreateWindow("Hello,world!");
glutDisplayFunc(display);//glutDisplayFunc(void (*func)(void))
glutMainLoop();//导致程序进入一个事件
}
保存,紧接着我们在相应的目录下:

gcc -g simple.c -o simple -lglut -lGL

你会发现后面多了两个-l参数,他们正是opengl的核心.glut[OpenGL Utility Toolki]是一个适用于所有现代视窗系统的函数库,GL是OpenGl的基础

前提:你要安装opengl图形库.

updata:

debian安装OpenGL:

sudo apt-get install freeglut3 freeglut3-dev #freeglut是一款开源的图形编程接口
sudo apt-get install binutils-gold #Ubuntu>=11.10的版本需要安装此包以解决连接问题


然后我们这样

./simple


就是这样子,一开始我以为opengl和Turbo图形库没有太大的区别,稍后我会把自己的想法驳倒.

先初步讲一下这段程序的结构,它是以后大型opengl程序的基础,其中的内容也是比较多的.

1.一个main()函数,它负责初始化glut.

2.一个init()函数,它设置初始量.

3.一个显示回调函数display().

4.负责处理输入和窗口事件的其他回调函数.

这些是什么东西啊,说实在的,我现在也是不太理解,在我没找到它的乐趣之前,我只能通过这种方式推动自己的学习啊

还是具体看代码吧,我就说我知道的吧!莫见怪啊.

头文件<GL/glut.h>和下面连接的库遥相呼应,呵呵,其中glut.h中包含#include<GL/gl.h>和#include<GL/glu.h>这样子就把opengl的所有头文件包括进来了.gl是opengl核心库,它包含了所有必要的opengl函数;glu[OpenGL Utility Library]是OpenGL工具库,其中包含了用核心库的函数编写的扩展函数.核心库的函数名以gl开头,比如glClear(),而工具库以glu开头,比如...好吧,暂时没有.那么,以glut开头的函数你能想到什么呢?

还有,函数的命名真的很有特点.

void glutInit(int *char, char **argu)

   负责初始化GLUT ,应在其他glut函数和OpenGL函数调用之前调用.它从主函数获取参数.

int glutCreateWindows(char *title)

    负责创建一个窗口,并赋予其窗口标题,上面的例子就是hello,world.

glutDisplayFunc(void (*func)(void))

从字面上也能理解它是在回调一个名为func的函数.

void glutMainLoop()

它应该是main()函数的最后一个函数.

而整个display()函数就是在描绘一个矩形

void glClear(GL_COLOR_BUFFER_BIT)

还有

void glFlush()

是一对必不可少的语句,我不懂什么缓存,帧缓存,请注意他们的位置.

glBegin(GL_POLYGON) and glEnd()

是定义一个图元(opengl中有三类基本的几何图元:点(GL_POINTS),线段(GL_LINES)和多边形(GL_POLYGON))的起点和终点,也是成对出现的.

glVertex2f(-0.5,-0.5)的原型是

void glVertex{234}{sifd}(x轴,y...)

定义了顶点,允许你使用glVertex*()函数的各个变体定义二维还是三维的甚至更高的维度,sifd是类型了分别是short,int,float,double的缩写了.



  



智能推荐

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
© 2014-2019 ITdaan.com 粤ICP备14056181号  

赞助商广告