Ubuntu 14.0系统下OpenGL平台C语言测试图形代码

来源:互联网 发布:软件质量管理体系 编辑:程序博客网 时间:2024/05/21 09:17

Ubuntu 14.0系统下OpenGL平台C语言测试图形代码

1. 给系统配置OpenGL环境:

【转】 http://blog.csdn.net/evenness/article/details/9150351


2. 编写test.c文件:

键入code如下:

#includevoid init();void display();void DrawGLScene();int main(int argc, char* argv[]){     glutInit(&argc, argv);     glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);     glutInitWindowPosition(0, 0);     glutInitWindowSize(300,300);     glutCreateWindow("OpenGL 3D View");     init();     glutDisplayFunc(display);     glutMainLoop();     return 0;}void init(){    glClearColor(0.0, 0.0, 0.0, 0.0);       glMatrixMode(GL_PROJECTION);       glOrtho(-5, 5, -5, 5, 5, 15);       glMatrixMode(GL_MODELVIEW);    gluLookAt(0, 0, 10, 0, 0, 0, 0, 1, 0);}void display(){    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);    glEnable(GL_BLEND);    glBlendFunc(GL_ONE,GL_ONE);    glLoadIdentity();    glTranslatef(-1.0f,0.0f,-6.0f);    glBegin(GL_TRIANGLES);    glColor3f(1.0f,0.0f,0.0f);    glVertex3f( 0.0f, 2.0f, 0.0f);    glColor3f(0.0f,1.0f,0.0f);    glVertex3f(-1.0f,-1.0f, 0.0f);    glColor3f(0.0f,0.0f,1.0f);    glVertex3f( 1.0f,-1.0f, 0.0f);    glEnd();    glDisable(GL_BLEND);    glFlush();}

3.编译运行

编译:

gcc test.c -o test -lGL -lGLU -lglut

运行:

./test

运行正常结果是绘制了一个茶壶


4.代码解释:

先说init( )中的:

  • glClearColor()

    最底下的也就是背景,用()中的RGB模式参数来绘制,四个参数依次的意思是:R , G , B ,Alph 。也就是说是红绿蓝和深度(图形学里面也叫混合度)。1.0f=100%的意思,对应的0.5f=50%的意思;


  • glMatrixMode()

    矩阵(线性代数和离散数学中的概念,用来表示点的集合)的模式,因为图像的填色是像素点的填色,每一个像素点可以看作是矩阵的一个一个点。该函数有很多可以调用的参数,具体有哪些,自己查去。


  • glOrtho()

    【转】:http://www.cnblogs.com/onlycxue/archive/2013/08/14/3256623.html


  • gluLookAt()

    这个函数是设定观察者的视角,也就是说人,参照物(一般为地面),和物体的位置关系。六个参数,每三个一组,第一二组表示人眼和物体中心原点在参考系中的坐标(记作n1,n2),第三组表示的是人脑袋的朝向,如图:

    id

再说display( )中的:

  • ​glClear()

    对新建的窗口进行初始化,清除窗口中的脏内容,因为分配给我们使用的窗口区域,在分配之前都是显示当前这一次显卡显示的图片,对于我们要绘制的图形来说是属于脏内容,所以要清除。


  • glEnable()

    打开颜色的混合模式。


  • glBlendFunc()

    设置颜色混合模式为怎样的,例如,一种颜色和另一种颜色的混合,或者是一种颜色和另外多种颜色的混合,里面的参数代表着不同的颜色混合模式,对应的算法不同效果也不同。


  • glLoadIdentity()

    重置当前指定的矩阵为单位矩阵。


  • glTranslatef()

    在三维平面内上下左右前后的移动,三个个参数按顺序分别代表的是在x,y,z轴方向上的偏移,坐标轴情况在前面的图片中已经指出。


  • glBegin()

    表示开始绘制图形,括号中的参数表示要绘制的图形是什么。


  • glEnd()

    作为绘制图形结束的标志,和glBegin()配套使用。


  • glColor3f()

    设置绘制图形所用的画笔的颜色。


  • glVertex3f()

    设置点的位置。三个参数分别代表x,y,z轴上的偏移量。


  • glDisable()

    表示图形的绘制的顺序是怎样的,比如说先绘制离得远的物体,那么就会产生透视效果,如果是正常绘制那么就会显示正常遮蔽的东西。


  • glFlush()

    把绘制好的图形送到显卡或者cpu里面,具体送到哪里,得看绘制的图形调用得具体函数用到的是显卡计算还是cpu计算。最后把得到得图形结果送到显卡上让显示器显示出来,并强制刷新整个计算机屏幕。


最后说主函数main()中的:​

  • glutInit()

    初始化GLUT库;在绘制图形之前,要开启事件循环机制,也就是说打开开关,我们才能用GLUT绘图;


  • glutInitDisplayMode()

    设置初始显示模式。比如GLUT_RGB,就是指定 RGB 颜色模式的窗口。


  • glutInitWindowPosition()

    窗口左上角出现的位置。计算机屏幕左上角为坐标原点,x+轴向右,y+轴向下。


  • glutInitWindowSize()

    设置窗口的大小。


  • ​glutCreateWindow()

    创建一个窗口。


  • glutDisplayFunc()

    glutDisplayFunc()用于注册一个绘图函数,这样操作系统在必要时刻就会对窗体进行重新绘制操作。类似于windows程序设计中处理WM_PAINT消息。具体来说呢,就是设置一个函数当需要进行画图时就调用这个函数如:glutDisplayFunc(display)调用display()这个函数进行重绘。


  • glutMainLoop()

    glutMainLoop会让我们的命令进入GLUT事件处理循环。在一个GLUT程序中,这个例程被调用一次 。


原创粉丝点击