• opengl基础学习专题 (一 )编程环境搭建



    题外话:

         第一次在博客园上同大家分享博文.水的的地方,错别字的地方.环境交流.批评.知道了马上改.

         以前在百度空间中写技术分享博文,后来百度啥也没说就把整个空间封了.当时感觉 还是有点寒心.只想黑一下它,厂长老了.场子也该换了.

         对于想写个oepngl基础学习的专题,主要是网上资源有点老,好多都运行不了,买了红宝书<<OpenGL 编程指南 第8版>>,看了还看,觉得有点专业,优化和技术核心讲的的多.

    而且都是代码片段,像自己这种门外汉学习起来还是觉得基础不行.需要恶补一下关于 freeglut 和 glew 编程的基础api.基于这些原因想把自己关于opengl的总结

    分享给喜欢图形朋友.还有一个网上关于opengl基础学习资料都是一个模子刻得,但是那个模子有点老了.代码出现错误.需要有人改一点点.

    正题:

         这里是在Window上搭建的freeglut和glew开发环境.至少在2015-10-11之前,采用的这两个库是官网上最新的.

    freeglut 是 freeglut-3.0.0版本,freeglut是兼容glut 图形库的主要API. glew 是对其封装使其可以跨平台.个人觉得跨平台嚼头比较多.

    真搞起来还是需要下一番功夫.后者采用的版本是glew-1.13.0.

    正式开始配置环境.

    1.上面两个库的基本头文件和库文件 下载地址

    http://download.csdn.net/detail/wangzhione/9172439

    这里下载下来 将*lib和*.dll 放入工程的根目录.

    并链接进来,参照下面图片 添加到附加依赖库中,全部加上,

    对于module文件下,推荐的做法是 .

    找到 项目右键属性,找到VC++目录 -> 包含目录 如下图

    做如下操作

    这样你的环境就ok,剩下 需要 在项目中包含这些 头文件,我的做法如下:

    主要看上面module的结构,你建虚拟目录,shift+alt+A包含那些头文件就可以了,关于库文件一定要在根目录下,就是项目文件夹下.

    这里上面关于 VS上学习freeglut和glew环境搭建好了.这样做太麻烦了.

    2.上面搭建环境稍微麻烦一点每次都这样搞,在Window上开发受不了.

    说一些题外话,上面的 包含路径 做法 等价于 linux 上 gcc 的命令是这样的

    gcc -Imodule/freeglut -Imodule/glew -L. -l..... -l.... ....

    说道这里 继续提一下一个小细节 gcc 对于-l同名的 静态库和动态库,优先找动态库,加上-static选项才去找静态库.

    下面做法是是利用VS自动添加项目模板功能. 这里 我用VS2015 建了一个 .simplec 模板 如下:

    http://download.csdn.net/detail/wangzhione/9172445

    下载下来 放在VS2015的 项目模板文件下. 基本路径格式是

    C:Users{计算机名字}DocumentsVisual Studio 2015TemplatesProjectTemplates

    后面创建项目(shift+Ctrl+N)就添加那个项目就可以了.

    3.关于上面的C基础学习开发框架,源码工程文件如下:

    http://download.csdn.net/detail/wangzhione/9172455

    有机会单独写几篇博文奉献当时设计思路.

    这个简单的C开发基础框架,适合学习,适合玩.

    具备多线程,简单配置文件读取,日志记录,简单字符串,csv,json文件读取等等.常用宏,一些约束简单的常用的数据结构封装.

    这里再说一些其它的,纯属个人感受.

      1) 推荐 在Window上学习 安装 最新的IDE,默认是Visual studio 这个工具 调试功能 真的屌的不行.

    真的是节约生命.下次有机会 我再分享 如何用Pelles C 开发 程序专题. 用起来 还凑合着.调试打断点容易崩.

         2) 在Linux上工作 就用 vim + gcc + makefile . 下次 再试试cmake 分享一下.

    微软的工具确实好用,每每工作中操作着满屏的黑窗口,真的是想问, 这样真的合适吗. 那些前辈大神们.为什么我们不尝试一下

    为Linux 开发一个Visual Stduio for Linux 2048,解救一下像我这样的菜鸟.

    到这里我们环境就OK,下面 写一个 测试DEMO , 如下 ,有些问题不要老是问为什么,还是要多坚持codeing,因为没有那么多为什么.

    #include <glut.h>
    
    //屏幕绘制函数
    void display(void);
    
    //这里简单的配置 glut环境
    int main(int argc, char *argv[])
    {
    	glutInit(&argc,argv);
    	glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);
    	glutInitWindowPosition(100,100);
    	glutInitWindowSize(400,400);
    	glutCreateWindow("第一个OpenGL程序");
    
    	//设置绘制的函数
    	glutDisplayFunc(display_02);
    
    	//执行glut的循环
    	glutMainLoop();
    
    	return 0;
    }
    
    void 
    display(void)
    {
    	glClear(GL_COLOR_BUFFER_BIT);
    	//这里画一个矩形
    	glRectf(-0.5f,-0.5f,0.5f,0.5f);
    	glFlush();
    }
    

    该程序的作用是在一个黑色的窗口中央画一个白色的矩形。

    对于上面代码格式,下次有机会再去分享,关于C命名,写的格式流派 感觉扯淡都能扯一周,这些问题很少有人说,基本是捉打滚爬多了之后就有体会.

    这里再说多一点,对于C基础不好的人,可以看我加的一个好友文章,多学学.收益匪浅,他比较较真,但是代码还是比较严谨的,适合打基础.

    garbageMan => http://www.cnblogs.com/pmer/

    还有云风的博文,为了提升逼格可以看看.务实就看上面博文

    下面对各行语句进行说明。

    首先,需要包含头文件#include <glut.h>,这是freeglut中包含的一个头文件.

    然后看main函数。

    int main(int argc, char *argv[]),这个是带命令行参数的main函数,各位应该见过吧?没见过的同志们请多翻翻书,等弄明白了再往下看。

    注意main函数中的各语句,除了最后的return之外,其余全部以glut开头。这种以glut开头的函数都是GLUT工具包所提供的函数,下面对用到的几个函数进行介绍。

    1、glutInit,对GLUT进行初始化,这个函数必须在其它的GLUT使用之前调用一次。其格式比较死板,一般照抄这句glutInit(&argc, argv)就可以了。

    2、 glutInitDisplayMode,设置显示方式,其中GLUT_RGB表示使用RGB颜色,与之对应的还有GLUT_INDEX(表示使用索引颜色)。GLUT_SINGLE表示使用单缓冲,与之对应的还有GLUT_DOUBLE(使用双缓冲)。更多信息,请自己Google。当然以后的教程也会有一些讲解。(关于如何翻墙下次有机会单独分享一个博文)

    3、glutInitWindowPosition,这个简单,设置窗口在屏幕中的位置。

    4、glutInitWindowSize,这个也简单,设置窗口的大小。

    5、glutCreateWindow,根据前面设置的信息创建窗口。参数将被作为窗口的标题。注意:窗口被创建后,并不立即显示到屏幕上。需要调用glutMainLoop才能看到窗口。

    6、glutDisplayFunc,设置一个函数,当需要进行画图时,这个函数就会被调用。(这个说法不够准确,但准确的说法可能初学者不太好理解,暂时这样说吧)。

    7、glutMainLoop,进行一个消息循环。(这个可能初学者也不太明白,现在只需要知道这个函数可以显示窗口,并且等待窗口关闭后才会返回,这就足够了。)

    在glutDisplayFunc函数中,我们设置了“当需要画图时,请调用display函数”。于是display函数就用来画图。观察display中的三个函数调用,发现它们都以gl开头。这种以gl开头的函数都是OpenGL的标准函数,下面对用到的函数进行介绍。

    1、glClear,清除。GL_COLOR_BUFFER_BIT表示清除颜色,glClear函数还可以清除其它的东西,但这里不作介绍。

    2、glRectf,画一个矩形。四个参数分别表示了位于对角线上的两个点的横、纵坐标。

    3、glFlush,保证前面的OpenGL命令立即执行(而不是让它们在缓冲区中等待)。其作用跟fflush(stdout)类似。

     

    那么到这里 基本配置就OK了,如果有问题,可以留言,也可以 搜索一下.

    博文中错误是肯定有的.欢迎指正.下次不加班就继续分享,欢迎加好友交流,就在北京.单身男程序员

      

  • 相关阅读:
    ELASTIC 动态修改配置API
    ELASTIC API
    ELASTIC索引监控脚本
    java并发多线程纪要
    Git 基础
    Linux 权限规划ACL
    Linux账号管理(二)
    Linux账号管理(一)
    Linux 备份工具dump
    Linux 文件压缩、打包
  • 原文地址:https://www.cnblogs.com/life2refuel/p/4870396.html
Copyright © 2020-2023  润新知