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

时间:2023-02-25 17:50:25

题外话:

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

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

对于想写个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 放入工程的根目录.

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

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

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

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

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

做如下操作

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

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

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

主要看上面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基础学习专题 &lpar;二&rpar; 点直线和多边形

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

  2. opengl基础学习专题 &lpar;三&rpar; 多边形绘制的几种样式

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

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

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

  4. Hadoop学习笔记&lpar;3&rpar;——分布式环境搭建

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

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

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

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

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

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

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

  8. 深度学习(TensorFlow)环境搭建:(二)Ubuntu16&period;04&plus;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. HTTP中的POST、GET区别

    Http定义了与服务器交互的不同方法,最基本的方法有4种,分别是GET,POST,PUT,DELETE.URL全称是资源描述符,我们可以这样认为:一个URL地址,它用于描述一个网络上的资源,而HTTP ...

  2. BZOJ 1485&colon; &lbrack;HNOI2009&rsqb;有趣的数列

    Description 求长度为 \(2n\) 的序列.要求 1. \(a_1<a_3<a_5<...<a_{2n-1}\) . 2. \(a_2<a_4<a_6& ...

  3. &lbrack;HDOJ2639&rsqb;Bone Collector II(第k优01背包)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2639 题意:求01背包的第k优解 dp(i, j)表示容量为j时的i优解 对于第二维的操作和01背包几 ...

  4. 调度器&lpar;scheduler&rpar;

    调度器(schedule)为游戏提供定时事件和定时调用服务. 调度器(schedule)的功能和事件监听器(eventlistener)的功能有点类似:都是在特定情况下调用某个事先准备好的回调函数. ...

  5. 法方总经理用的笔记本电脑&amp&semi;一体机拆开图。

    键盘上有三个字符,

  6. Java基础---Java---网络编程---TCP、UDP、UDP-键盘录入方式数据、Socket、TCP复制文件、UDP-聊天

    网络编程 网络模型 *OSI参考模型 *Tcp/IP参考模型 网络通读要素 *IP地址 *端口号 *传输协议 1.找到对方Ip 2.数据要发送到对方指定的的应用程序上,为了标识这些应用程序,所经给这些 ...

  7. java基础知识三 流

    Java 流(Stream).文件(File)和IOJava.io 包几乎包含了所有操作输入.输出需要的类.所有这些流类代表了输入源和输出目标. Java.io 包中的流支持很多种格式,比如:基本类型 ...

  8. 我对SAP Business One 项目实施的理解

    一.什么是SAP: 大家都知道ERP是什么,ERP是企业资源计划管理系统.是指建立在信息技术基础上,集信息技术与先进管理思想于一身,以系统化的管理思想,为企业员工及决策层提供决策手段的管理平台.那么问 ...

  9. mybatis&colon;数据持久层框架

    mybatis是一个持久层的框架,是Apache下的*项目. mybatis托管到goolecode下,再后来托管到GitHub下:https://github.com/mybatis/mybati ...

  10. c&num;多线程下的进程同步SignalAndWait 使用简单说明

    解释:向一个 WaitHandle 发出信号并等待另一个进入信号. 总体概述: .NET Framework中提供一些类用于手动进行线程间的访问同步.这些类主要分为3大类别(但正如下文中会看到的这些类 ...