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\{计算机名字}\Documents\Visual Studio 2015\Templates\ProjectTemplates
后面创建项目(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。当然以后的教程也会有一些讲解。(关于如何FQ下次有机会单独分享一个博文)
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了,如果有问题,可以留言,也可以 搜索一下.
博文中错误是肯定有的.欢迎指正.下次不加班就继续分享,欢迎加好友交流,就在北京.单身男程序员