题外话:

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

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

对于想写个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。当然以后的教程也会有一些讲解。(关于如何翻墙下次有机会单独分享一个博文)

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了,如果有问题,可以留言,也可以 搜索一下.

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

opengl基础学习专题 (一 )编程环境搭建的更多相关文章

  1. opengl基础学习专题 (二) 点直线和多边形

    题外话 随着学习的增长,越来越觉得自己很水.关于上一篇博文中推荐用一个 学习opengl的 基于VS2015的 simplec框架.存在 一些问题. 1.这个框架基于VS 的Debug 模式下,没有考 ...

  2. opengl基础学习专题 (三) 多边形绘制的几种样式

    题外话 聪明人之所以不会成功,是由于他们缺乏坚韧的毅力. ——艾萨克·牛顿(1643年1月4日—1727年3月31日)英国 也许可以理解为 想更深一步的时候,坚持,努力和聪明缺一不可. 挺直腰杆在此向 ...

  3. ArduinoYun教程之Arduino编程环境搭建

    ArduinoYun教程之Arduino编程环境搭建 Arduino编程环境搭建 通常,我们所说的Arduino一般是指我们可以实实在在看到的一块开发板,他可以是Arduino UNO.Arduino ...

  4. Hadoop学习笔记(3)——分布式环境搭建

    Hadoop学习笔记(3) ——分布式环境搭建 前面,我们已经在单机上把Hadoop运行起来了,但我们知道Hadoop支持分布式的,而它的优点就是在分布上突出的,所以我们得搭个环境模拟一下. 在这里, ...

  5. Qt在Mac OS X下的编程环境搭建

    尊重作者,支持原创,如需转载,请附上原地址:http://blog.csdn.net/libaineu2004/article/details/46234079 在Mac OS X下使用Qt开发,需要 ...

  6. Qt4.8在Windows下的三种编程环境搭建

    Qt4.8在Windows下的三种编程环境搭建 Qt的版本是按照不同的图形系统来划分的,目前分为四个版本:Win32版,适用于Windows平台:X11版,适合于使用了X系统的各种Linux和Unix ...

  7. 深度学习(TensorFlow)环境搭建:(三)Ubuntu16.04+CUDA8.0+cuDNN7+Anaconda4.4+Python3.6+TensorFlow1.3

    紧接着上一篇的文章<深度学习(TensorFlow)环境搭建:(二)Ubuntu16.04+1080Ti显卡驱动>,这篇文章,主要讲解如何安装CUDA+CUDNN,不过前提是我们是已经把N ...

  8. 深度学习(TensorFlow)环境搭建:(二)Ubuntu16.04+1080Ti显卡驱动

    前几天把刚拿到了2台GPU机器组装好了,也写了篇硬件配置清单的文章——<深度学习(TensorFlow)环境搭建:(一)硬件选购和主机组装>.这两台也在安装Ubuntu 16.04和108 ...

  9. Qt在Mac OS X下的编程环境搭建(配置Qt库和编译器,有图,很清楚)

    尊重作者,支持原创,如需转载,请附上原地址:http://blog.csdn.net/libaineu2004/article/details/46234079 在Mac OS X下使用Qt开发,需要 ...

随机推荐

  1. [LOJ #2473] [九省联考2018] 秘密袭击coat

    题目链接 洛谷. LOJ,LOJ机子是真的快 Solution 我直接上暴力了...\(O(n^2k)\)洛谷要\(O2\)才能过...loj平均单点一秒... 直接枚举每个点为第\(k\)大的点,然 ...

  2. 自学Python快速入门

    1 helloworld#基本语法print("hello") #换行print('1221312\12312312\2312312321312\21312312') ##表示注释 ...

  3. BZOJ2830 & 洛谷3830:[SHOI2012]随机树——题解

    https://www.luogu.org/problemnew/show/P3830#sub   <-题面看这里~ https://www.lydsy.com/JudgeOnline/prob ...

  4. BZOJ2002:[HNOI2010]弹飞绵羊——题解

    http://www.lydsy.com/JudgeOnline/problem.php?id=2002 https://www.luogu.org/problemnew/show/P3203 某天, ...

  5. POJ 3621 Sightseeing Cows | 01分数规划

    题目: http://poj.org/problem?id=3621 题解: 二分答案,检查有没有负环 #include<cstdio> #include<algorithm> ...

  6. angularJS入门小Demo2 【包含不用数据库而用data.json格式响应前台的ajax请求方式测试】

    事件绑定: <html> <head> <title>angularJS入门小demo-5 事件指令</title> <script src=&q ...

  7. 使用restClient工具发送post请求并带参数

    运行 restClient 点 Method选项卡,选中post方法 然后切换到 Body选项卡,点右边的 倒三角,选 String body 出现如下窗口: 点击右边红圈里的按钮,弹出窗口: 点是, ...

  8. spring 整合 redis 单机版

    增加spring配置文件: application-jedis.xml <?xml version="1.0" encoding="UTF-8"?> ...

  9. Leetcode 445. 两数相加 II

    1.题目描述 给定两个非空链表来代表两个非负整数.数字最高位位于链表开始位置.它们的每个节点只存储单个数字.将这两数相加会返回一个新的链表. 你可以假设除了数字 0 之外,这两个数字都不会以零开头. ...

  10. ZooKeeper文档(二)

    ZooKeeper:因为协调的分布式系统是一个动物园 ZooKeeper对分布式应用来说是一个高性能的协调服务.它暴露通常的服务-比如命名,配置管理,同步,和组服务-用一种简单的接口,所以你不用从头开 ...