zoukankan      html  css  js  c++  java
  • opengl学习笔记(一)

    ubuntu下opengl的安装及配置


    OpenGL 是一套由SGI公司发展出来的绘图函数库,它是一组 C 语言的函数,用于 2D 与 3D 图形应用程序的开发上。OpenGL 让程序开发人员不需要考虑到各种显示卡底层运作是否相同的问题,硬件由 OpenGL 核心去沟通,因此只要显示卡支援 OpenGL,那么程序就不需要重新再移植,而程序开发人员也不需要重新学习一组函数库来移植程序。

    安装

    首先不可或缺的就是编译器与基本的函数库,如果系统没有安装的话,依照下面的方式安装:

    sudo apt-get install build-essential

    安装OpenGL Library

     1 sudo apt-get install libgl1-mesa-dev 

    安装OpenGL Utilities

     1 sudo apt-get install libglu1-mesa-dev 

    OpenGL Utilities 是一组建构于 OpenGL Library 之上的工具组,提供许多很方便的函数,使 OpenGL 更强大且更容易使用。

    安装OpenGL Utility Toolkit

     1 sudo apt-get install libglut-dev 

    OpenGL Utility Toolkit 是建立在 OpenGL Utilities 上面的工具箱,除了强化了 OpenGL Utilities 的不足之外,也增加了 OpenGL 对于视窗介面支援。
          注意:在这一步的时候,可能会出现以下情况,shell提示:

    将上述$ sudo apt-get install libglut-dev命令改成$ sudo apt-get install freeglut3-dev即可。

    测试


    示例test.c源码:

    #include <GL/glut.h>
    
    
    void init(void)
    {
        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);
    
        return;
    }
    
    void display(void)
    {
        glClear(GL_COLOR_BUFFER_BIT);
        glColor3f(1.0, 0, 0);
        glutWireTeapot(3);
        glFlush();
    
        return;
    }
    
    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;
    }

    编译程序时,执行以下指令:

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

    执行:

    $ ./test

    程序运行结果

    初始化一个窗口,并在窗口中绘制一个茶壶

    源码分析:

    1.初始化和创建窗口

    在打开窗口之前,必须指定窗口的特征。它是单缓存的还是双缓冲的?它把颜色存储为RGBA值还是颜色索引值?它应该出现在显示屏幕的什么位置?为了在应用程序中指定这些问题的答案,在使用glutCreateWindows()函数打开窗口之前,分别必须调用glutInit(),glutInitdisplayMode(),glutInitWindowSize(),和glutInitWindowPosition函数。


    void glutInit( int argc, char** argv)

    在调用其它任何GLUT函数之前首先要调用这个函数,它对GLUT函数库进行初始化。这个函数的参数值应与main()函数相同。

    void glutInitDisplayMode(unsigned int mode);

    指定glutCreateWindow()函数将要创建的的窗口的显示模式(例如使用RGBA还是颜色索引,使用单缓冲区还是双缓冲等)。另外,它还可以指定与这个窗口相关联的深度缓冲区,模板缓冲区,和累积缓冲区。mode参数的值是GLUT_RGBA(或GLUT_INDEX),GLUT_SINGLE(或GLUT_DOUBLE)以及缓冲区启用标记(GLUT_DEPTH, GLUT_STENCIL, GLUT_ACCUM)的按位OR组合。这个参数的默认值为GLUT_RGBA | GLUT_SINGLE(使用RGBA模式和单缓冲)。

    void glutInitWindowPosition( int x, int y);

    void glutInitWindowSize( int width, int height );

    请求glutCreateWindow()函数创建的窗口具有指定的大小和位置。

    int glutCreateWindow(char *name);

    打开一个具有以上设置的特征(显示模式,宽度,高度等)的窗口。如果窗口系统支持,name字符串可以出现在窗口的标题栏上。进入glutMainLoop()之前,这个窗口并不会显示,因此在显示窗口之前不要在窗口中进行渲染。

     2. 处理窗口和输入事件


    在窗口创建之后,但是在进入主循环之前,应该使用下面这些函数注册相关的回调函数。

    void glutDisplayFunc( void(*func)(void));

    指定了当窗口的内容需要重新绘制时将要调用的函数。在发生下面这些情况时,窗口就需要进行重绘:窗口刚打开,窗口弹出,窗口的内容遭到破坏,以及显示的调用了glutPostRedisplay()函数。

    3.初始化和绘制三维物体

    GLUT提供了很多绘图函数。这些函数都是在立即模式下渲染所有的几何图形。每个三维物体可以采用以下两种风格之一:没有表面法线的线框模式和具有着色和法线的实心形式。需要使用光照的时候,必须使用实心模式。只有绘制茶壶模型的函数能够生成纹理坐标。

    void glutWireTeapot(GLdouble size);

    void glutWireTeapot(GLdouble size);

    分别用来绘制茶壶的线框形式和实心形式。

    4.运行程序

    在完成设置之后,GLUT程序就进入事件处理循环glutMainLoop()

  • 相关阅读:
    Sqli-labs less 36
    python3操作mysql数据库增删改查
    python3连接MySQL数据库
    修改(python) mysql 数据库 使其可以支持插入中文
    十九 Django框架,发送邮件
    十八 Django框架,生成二维码
    十七 Django框架,文件上传
    十六 Django框架,信号
    十五 Django框架,缓存
    十四 Django框架,中间件
  • 原文地址:https://www.cnblogs.com/feifanrensheng/p/9173930.html
Copyright © 2011-2022 走看看