zoukankan      html  css  js  c++  java
  • 第一个openGL程序

    一、工具的安装

    因为要写C++程序,为了便捷,这里我安装的Visual Studio;

    免费使用90天!安装好了之后,我们要为我们的开发安装相应的工具集;

    因为我是要在windows上跑的,所以选择如下两个包:

    选择完之后进行安装(3.7个G)

    二、辅助头文件

    因为我们要用openGL来画图形,所以要使用到界面工具,这里采用GLUT(《opengl编程指南第八版》用的是glut);

    相关包请自行百度:

    接下来就是5个文件的放置了:

    ①.h头文件(在这里指glut.h)

    ②.lib包文件(在这里指glut.lib和glut32.lib)

     

     ③.dll动态链接库文件(在这里指glut.dll和glut32.dll)

    把这两个文件在上述两个文件夹中都放置一次,即:

    System32/glut.dll、System32/glut32.dll;

    SysWOW64/glut.dll、SysWOW64/glut32.dll;

    三、新建第一个openGL程序

    文件->新建->项目:

    在这我们不使用模板,因为暂时对这些模板不是很熟悉,选择之后下一步填写项目名称和存放路径,创建。

    然后,你可以在源文件右键点击添加->新建项(或者快捷键ctrl+shift+A):

    然后在新添加的.cpp文件里复制如下代码:

    #include <GL/glut.h>
    void display(void) {
        glClear(GL_COLOR_BUFFER_BIT);
        glRectf(-0.5f, -0.5f, 0.5f, 0.5f);
        glFlush();
    }
    
    int main(int argc, char *argv[]) {
        glutInit(&argc, argv);
        glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);
        glutInitWindowPosition(300, 300);
        glutInitWindowSize(300, 300);
        glutCreateWindow("第一个OpenGL程序");
        glutDisplayFunc(&display);
        glutMainLoop();
        return 0;
    }

    保存->本地调试:

    短暂的等待之后,我们就能看到程序运行的结果了(窗口中画了一个白底的正方形):

    至此,我们的第一个openGL程序就此结束!

    接下来针对这段代码,作一个简要的解析:

     1 //demo.cpp
     2 
     3 #include <GL/glut.h>
     4 void display(void) {
     5     glClear(GL_COLOR_BUFFER_BIT);
     6     glRectf(-0.5f, -0.5f, 0.5f, 0.5f);
     7     glFlush();
     8 }
     9 
    10 int main(int argc, char* argv[]) {
    11     glutInit(&argc, argv);
    12     glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);
    13     glutInitWindowPosition(300, 300);
    14     glutInitWindowSize(300, 300);
    15     glutCreateWindow("第一个OpenGL程序");
    16     glutDisplayFunc(&display);
    17     glutMainLoop();
    18     return 0;
    19 }

    这个demo代码量很少,但是麻雀虽小五脏俱全,然我们一起来看看吧。

    line3:引入glut头文件;

    line5:glClear(arg)表示清除指定缓冲区(可以理解为初始化背景色),可选参数如下

    • GL_COLOR_BUFFER_BIT:    当前可写的颜色缓冲
    • GL_DEPTH_BUFFER_BIT:    深度缓冲
    • GL_ACCUM_BUFFER_BIT:   累积缓冲
    • GL_STENCIL_BUFFER_BIT: 模板缓冲

    line6:glRectf()表示根据左下角坐标(-0.5f,-0.5f)和右上角坐标(0.5f,0.5f)绘制矩形;

    line7:glFlush(),一般情况下,我们提交给OPENGL的指令并不是马上送到驱动程序里执行的,而是放到一个缓冲区里面,等这个缓冲区满了再一次性发到驱动程序里执行;很多时候只有几条指令是填充不满那个缓冲区的,这就是说这些指令根本没有被发送到驱动里,所以我们要调用glFlush来强制把这些指令送到驱动里进行处理。

    line11:glutInit(&argc, argv),固定写法,初始化 GLUT 库;

    line12:glutInitDisplayMode(arg),设置显示模式,参数可以为组合参数,上述代码表示指定RGB颜色模式的窗口,指定单缓存窗口;

    line13:glutInitWindowPosition(x,y),初始化设置窗口位置;

    line14:glutInitWindowSiz(width,height),初始化设置窗口大小;

    line15:glutCreateWindow(title),创建窗口,参数为窗口标题;

    line16:glutDisplayFunc(void Fuc);glut调用用户自定义的绘图函数;

    line17:glutMainLoop()事件循环主函数,就是将与“事件”相关的代码无限循环;(内存泄漏问题

    运行结果:

  • 相关阅读:
    Quartz2D复习(三) --- 涂鸦
    Quartz2D复习(二) --- 手势解锁
    Quartz2D复习(一)--- 基础知识 / 绘制线段圆弧 / 图片水印 / 截图
    控制器和应用数据存储
    UIApplication
    setTimeout和setInterval
    工作中碰到的js问题(disabled表单元素不能提交到服务器)
    通知
    UITableViewController和延时执行、自定义控件
    将博客搬至CSDN
  • 原文地址:https://www.cnblogs.com/eco-just/p/10659968.html
Copyright © 2011-2022 走看看