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。当然以后的教程也会有一些讲解。(关于如何翻墙下次有机会单独分享一个博文)
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基础学习专题 (一 )编程环境搭建的更多相关文章
- opengl基础学习专题 (二) 点直线和多边形
题外话 随着学习的增长,越来越觉得自己很水.关于上一篇博文中推荐用一个 学习opengl的 基于VS2015的 simplec框架.存在 一些问题. 1.这个框架基于VS 的Debug 模式下,没有考 ...
- opengl基础学习专题 (三) 多边形绘制的几种样式
题外话 聪明人之所以不会成功,是由于他们缺乏坚韧的毅力. ——艾萨克·牛顿(1643年1月4日—1727年3月31日)英国 也许可以理解为 想更深一步的时候,坚持,努力和聪明缺一不可. 挺直腰杆在此向 ...
- ArduinoYun教程之Arduino编程环境搭建
ArduinoYun教程之Arduino编程环境搭建 Arduino编程环境搭建 通常,我们所说的Arduino一般是指我们可以实实在在看到的一块开发板,他可以是Arduino UNO.Arduino ...
- Hadoop学习笔记(3)——分布式环境搭建
Hadoop学习笔记(3) ——分布式环境搭建 前面,我们已经在单机上把Hadoop运行起来了,但我们知道Hadoop支持分布式的,而它的优点就是在分布上突出的,所以我们得搭个环境模拟一下. 在这里, ...
- Qt在Mac OS X下的编程环境搭建
尊重作者,支持原创,如需转载,请附上原地址:http://blog.csdn.net/libaineu2004/article/details/46234079 在Mac OS X下使用Qt开发,需要 ...
- Qt4.8在Windows下的三种编程环境搭建
Qt4.8在Windows下的三种编程环境搭建 Qt的版本是按照不同的图形系统来划分的,目前分为四个版本:Win32版,适用于Windows平台:X11版,适合于使用了X系统的各种Linux和Unix ...
- 深度学习(TensorFlow)环境搭建:(三)Ubuntu16.04+CUDA8.0+cuDNN7+Anaconda4.4+Python3.6+TensorFlow1.3
紧接着上一篇的文章<深度学习(TensorFlow)环境搭建:(二)Ubuntu16.04+1080Ti显卡驱动>,这篇文章,主要讲解如何安装CUDA+CUDNN,不过前提是我们是已经把N ...
- 深度学习(TensorFlow)环境搭建:(二)Ubuntu16.04+1080Ti显卡驱动
前几天把刚拿到了2台GPU机器组装好了,也写了篇硬件配置清单的文章——<深度学习(TensorFlow)环境搭建:(一)硬件选购和主机组装>.这两台也在安装Ubuntu 16.04和108 ...
- Qt在Mac OS X下的编程环境搭建(配置Qt库和编译器,有图,很清楚)
尊重作者,支持原创,如需转载,请附上原地址:http://blog.csdn.net/libaineu2004/article/details/46234079 在Mac OS X下使用Qt开发,需要 ...
随机推荐
- [LOJ #2473] [九省联考2018] 秘密袭击coat
题目链接 洛谷. LOJ,LOJ机子是真的快 Solution 我直接上暴力了...\(O(n^2k)\)洛谷要\(O2\)才能过...loj平均单点一秒... 直接枚举每个点为第\(k\)大的点,然 ...
- 自学Python快速入门
1 helloworld#基本语法print("hello") #换行print('1221312\12312312\2312312321312\21312312') ##表示注释 ...
- BZOJ2830 & 洛谷3830:[SHOI2012]随机树——题解
https://www.luogu.org/problemnew/show/P3830#sub <-题面看这里~ https://www.lydsy.com/JudgeOnline/prob ...
- BZOJ2002:[HNOI2010]弹飞绵羊——题解
http://www.lydsy.com/JudgeOnline/problem.php?id=2002 https://www.luogu.org/problemnew/show/P3203 某天, ...
- POJ 3621 Sightseeing Cows | 01分数规划
题目: http://poj.org/problem?id=3621 题解: 二分答案,检查有没有负环 #include<cstdio> #include<algorithm> ...
- angularJS入门小Demo2 【包含不用数据库而用data.json格式响应前台的ajax请求方式测试】
事件绑定: <html> <head> <title>angularJS入门小demo-5 事件指令</title> <script src=&q ...
- 使用restClient工具发送post请求并带参数
运行 restClient 点 Method选项卡,选中post方法 然后切换到 Body选项卡,点右边的 倒三角,选 String body 出现如下窗口: 点击右边红圈里的按钮,弹出窗口: 点是, ...
- spring 整合 redis 单机版
增加spring配置文件: application-jedis.xml <?xml version="1.0" encoding="UTF-8"?> ...
- Leetcode 445. 两数相加 II
1.题目描述 给定两个非空链表来代表两个非负整数.数字最高位位于链表开始位置.它们的每个节点只存储单个数字.将这两数相加会返回一个新的链表. 你可以假设除了数字 0 之外,这两个数字都不会以零开头. ...
- ZooKeeper文档(二)
ZooKeeper:因为协调的分布式系统是一个动物园 ZooKeeper对分布式应用来说是一个高性能的协调服务.它暴露通常的服务-比如命名,配置管理,同步,和组服务-用一种简单的接口,所以你不用从头开 ...