OpenGL编程指南(第七版)

转自:http://blog.csdn.net/w540982016044/article/details/21287645

在接触OpenGL中,配置显得相当麻烦,特别是在VS2012下配置时,存在许多问题,而网上的很多方法仅仅适用于VS2008,甚至仅适用于VC6.0,笔者经过自身的实践,参考了许多网上的资料,总结了一下配置的方法,当然这仅仅是笔者的个人理解,笔者个人水平有限,因此未必是万能的,如果解说存在错误或者不明白的地方,还望读者原谅和更正,谢谢。

一、    先进行常用的GLUT相关的配置

GLUT 代表OpenGL UtilityTookit。Mark J.Kilgard 为了使OpenGL应用程序结构能够真正独立于窗口系统构思了GLUT库。freeglut是一个GLUT的开源实现。

1、  到freeglut的官方网站http://freeglut.sourceforge.net/上把最新版的Freeglut下载下来,解压,然后根据读者所安装的VS版本,运行相应的项目。由于笔者用的是VS2012,所以,进入下面的目录:

运行freeglut.sln:

2、  选择Release方式运行

3、  出现错误,直接无视

4、  到..\freeglut-2.8.1\lib\x86下多出了三个文件

5、  到VS2012的安装目录下,笔者这里是:

在VC\include下建一个文件夹,名为“GL”,如果有了的话就不用建了。

6、  收集下图所示的所有相关文件:

(1)      h文件

(2)      lib文件

(3)      dll文件

相关的压缩包如下,读者可以到网上搜索:

与gl、glu有关的文件读者上网搜,都可以搜的到。

与freeglut有关的h文件、lib文件、dll文件可从第4步中下载和编译的freeglut-2.8.1获得,即:

与GLUT有关的可从网上下载压缩包:解压后可以得到如下目录内容:

与glew相关的可从网上下载压缩包:(如果有最新的下载最新版本的),解压后可以从其下的include目录得到如下内容:

但是这个压缩包的lib目录下是没有lib文件的,要获得这些lib,有两种方法:

一是直接百度搜索相关名称的lib文件和dll文件,然后下载;

二是从解压后的文件夹中找到如下目录内容:

然后像编译freeglut那样的方法获得lib和dll,只不过这里只能用VC6.0来编译。

与glaux相关的文件可以从网上下载压缩包:,解压后可以得到如下目录的内容:

7、  所有的文件准备好以后,接着就要将这些文件存放到适当的地方,以使得VS2012能够顺利找到它们。

(1)      h文件——VS2012安装目录下,第5步中建立的名为“GL”的文件夹:

(2)      lib文件——VS2012安装目录\VC\lib下:

(3)      dll文件——C:\Windows\SysWOW64(如果是32位电脑,则放在System32中)

二、    所有这些文件都已经好了以后,下面进入VS2012进行相关配置。

1、 创建Win32 控制台应用程序——选择空项目——添加cpp文件。这里都是正常的步骤。

下面的这些步骤在每一个OpenGL项目中最好都配置一次,尽管可能有些配置不需要也能够正常运行,但是作为查错方案,如果在下面的步骤有些没做,程序无法运行时,这是可以考虑先进行下面的配置,如果问题仍然无法解决,再另想办法。

2、 项目——项目属性——配置属性——链接器——输入——附加依赖项,添加

glut32.lib;Opengl32.lib;Glu32.lib;glew32.lib等,总之需要哪个就添加哪个。

3、 项目——项目属性——配置属性——链接器——系统——子系统,选择

窗口(/SUBSYSTEM:WINDOWS)

4、 项目——项目属性——配置属性——链接器——命令行——其它选项,添加

/ENTRY:mainCRTStartup

如果不这么做,会出现下面的错误:

经过上面的配置以后,可以运行下面的程序了,这些程序中不需要用到GLTools。

#include<windows.h>

#include<GL/glu.h>

#include<GL/gl.h>

#include<GL/glut.h>

#include<GL/glaux.h>

voidbackground(void)

{

//设置背景颜色为黑色

glClearColor(0.0,0.0,0.0,0.0);

}

voidmyDisplay(void)

{

//buffer设置为颜色可写

glClear(GL_COLOR_BUFFER_BIT);

//开始画三角形

glBegin(GL_TRIANGLES);

//设置为光滑明暗模式

glShadeModel(GL_SMOOTH);

//设置第一个顶点为红色

glColor3f(1.0,0.0,0.0);

//设置第一个顶点的坐标为(-1.0,-1.0)

glVertex2f(-1.0,-1.0);

//设置第二个顶点为绿色

glColor3f(0.0,1.0,0.0);

//设置第二个顶点的坐标为(0.0,-1.0)

glVertex2f(0.0,-1.0);

//设置第三个顶点为蓝色

glColor3f(0.0,0.0,1.0);

//设置第三个顶点的坐标为(-0.5,1.0)

glVertex2f(-0.5,1.0);

//三角形结束

glEnd();

//强制OpenGL函数在有限时间内运行

glFlush();

}

voidmyReshape(GLsizei w,GLsizei h)

{

glViewport(,,w,h);

//设置视口

glMatrixMode(GL_PROJECTION);

//指明当前矩阵为GL_PROJECTION

glLoadIdentity();

//将当前矩阵置换为单位阵

if(w<= h)

gluOrtho2D(-1.0,1.5,-1.5,1.5*(GLfloat)h/(GLfloat)w);

//定义二维正视投影矩阵

else

gluOrtho2D(-1.0,1.5*(GLfloat)w/(GLfloat)h,-1.5,1.5);

glMatrixMode(GL_MODELVIEW);

//指明当前矩阵为GL_MODELVIEW

}

intmain(int argc,char*argv[])

{

//初始化

glutInit(&argc,argv);

glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);

glutInitWindowSize(,);

glutInitWindowPosition(,);

//创建窗口

glutCreateWindow("Triangle");

//绘制与显示

background();

glutReshapeFunc(myReshape);

glutDisplayFunc(myDisplay);

glutMainLoop();

return();

}

运行结果如下:

三、与GLTools有关的配置

然而,在《OpenGL超级宝典》第5版中,程序——第一个三角形,就用到了GLTools的相关东西,这时,要进行下面的配置。

1、 可从网上下载GLTools压缩包:,解压后得到的目录如下:

也许你会发现,再深入目录,会有一个文件夹与前面建立的文件夹“GL”同名:

注意,这里千万不要把这个文件夹删了,因为GLTools需要GLEW来获取OpenGL3.0或者更新版本的特性,所以不用管它,跟前面建立的“GL”文件夹是可以共存的。

2、 可以将(也可以不)整个解压后的GLTools复制到VS2012的安装路径下,笔者这里将其复制到如下所示的位置:

下面的这些步骤在每一个OpenGL项目中都需要配置一次。

3、 在打开的VS2012工程项目中,做如下操作:

项目——项目属性——配置属性——VC++目录——常规——附加包含目录——将GLTools下的include目录包含进来:

4、 在附加依赖项中将gltools.lib包含进来,如图:

5、 设置忽略冲突:

工程右键 “属性”->“配置属性”->“C/C++”-> “代码生成” ->  “ 运行库” 选项设置成“多线程 (/MT)”,如图:

如果不这样处理,会出现如下错误或者警告:

这样就可以运行要使用GLTools的程序了,如下(《OpenGL超级宝典》第五版程序——第一个三角形):

#include<GLTools.h>

#include<GLShaderManager.h>

#ifdef_APPLE_

#include<glut/glut.h>

#else

#defineFREEGLUT_STATIC

#include<GL/glut.h>

#endif

GLBatch triangleBatch;

GLShaderManager shaderManager;

voidChangeSize(intw,inth)

{

    glViewport(, ,w,h);

}

voidSetupRC()

{

    glClearColor(0.0f, 0.0f, 1.0f, 1.0f);

    shaderManager.InitializeStockShaders();

    GLfloatvVerts[] = { -0.5f, 0.0f, 0.0f,

                         0.5f, 0.0f, 0.0f,

                         0.0f, 0.5f, 0.0f };

    triangleBatch.Begin(GL_TRIANGLES,);

    triangleBatch.CopyVertexData3f(vVerts);

    triangleBatch.End();

}

voidRenderScene(void)

{

    glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT |GL_STENCIL_BUFFER_BIT);

    GLfloatvRed[] = { 1.0f, 0.0f, 0.0f, 1.0f };

    shaderManager.UseStockShader(GLT_SHADER_IDENTITY, vRed);

    triangleBatch.Draw();

    glutSwapBuffers();

}

intmain(intargc,char*argv[])

{

    gltSetWorkingDirectory(argv[]);

    glutInit(&argc,argv);

    glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGBA |GLUT_DEPTH|GLUT_STENCIL);

    glutInitWindowSize(,);

    glutCreateWindow("Triangle");

    glutReshapeFunc(ChangeSize);

    glutDisplayFunc(RenderScene);

    GLenumerr = glewInit();

    if(GLEW_OK != err)

    {

        fprintf(stderr,"GLEW Error: %s\n",glewGetErrorString(err));

        return1;

    }

    SetupRC();

    glutMainLoop();

    return ;

}

运行结果如下:

至此,已经配置好了基本的环境,这样配置以后,与GL、GLU、GLUT、GLAUX、GLEW以及GLTools相关的所有头文件、lib文件在程序中就可以直接包含了,不会出现诸如“无法打开xxx.h文件”等这样的错误了。

当然笔者这里的配置方法也许并不能完全适应读者的需求,因为笔者是在学习《OpenGL超级宝典》第5版前几章时做的配置,可能到后期的学习,仍需要不断更改配置,望读者原谅和更正。

后期在OpenGL的配置上如果有其他的新的注意事项,笔者也将继续更新,希望读者给予更正,笔者将虚心采纳。

OpenGL编程指南(第七版)的更多相关文章

  1. 《OpenGL编程指南第七版》学习——编译时提示“error C2381: “exit” : 重定义;__declspec(noreturn) 不同”错误的解决办法

    解决办法一. #if defined(_WIN32) # ifndef GLUT_BUILDING_LIBextern _CRTIMP void __cdecl exit(int); 上面是glut. ...

  2. opengl编程指南 第七版 源代码bug Page35 lines.c 红宝书

    问题1:根据源代码时,我发现的时候去敲门.不正确实施效果.哪里是不正确?没有源代码glPushAttrib(GL_LINE_STIPPLE) glPopAttrib().所以会出现最后的下一次抽奖提供 ...

  3. 编译opengl编程指南第八版示例代码通过

    最近在编译opengl编程指南第八版的示例代码,如下 #include <iostream> #include "vgl.h" #include "LoadS ...

  4. OpenGl编程指南第7版(红宝书)环境配制

    环境 OS:win7 旗舰版SP1 64位 编译器: VS 2013 express 的cl 软件 glut. 在这个页面https://www.opengl.org/resources/librar ...

  5. OpenGL编程指南(第九版) Tiangles 学习笔记

    ////////////////////////////////////////////////////////////////////////////// // // Triangles.cpp / ...

  6. [转]OpenGL编程指南(第9版)环境搭建--使用VS2017

    1.使用CMake Configure中选择VS2017 Win64 , Finish: 点击Generate. 2.进入build目录 打开GLFW.sln , 生成解决方案. 打开vermilio ...

  7. 解读经典-《C#高级编程》第七版-Chapter1-.Net体系结构-Page1-6

    前言 大家好.这是开通本号的第一篇文章.从事IT行业已经20年了,从使用PowerBuilder做企业信息系统开始,做了七八年开发,然后转型Java不是很成功,从07年之后,我转做产品经理,机缘巧合, ...

  8. VS15 openGL 编程指南 配置库 triangle例子

    最近去图书馆借了一本书<OpenGL编程指南(原书第八版)>,今天倒腾了一天才把第一个例子运行出来. 所以,给大家分享一下,希望能快速解决配置问题. 一.下载需要的库文件 首先,我们需要去 ...

  9. 解读经典《C#高级编程》第七版 Page79-93.对象和类型.Chapter3

    前言 本篇我们继续讲解本章其余的部分:构造函数.只读字段.匿名类型.结构详解.部分类.静态类.Object类.扩展方法,等. 01 类 构造函数 构造函数是一种特殊的方法: 与类同名 没有返回值,甚至 ...

随机推荐

  1. oracle学习笔记(二)

    1. Oracle字符串操作 1.1. 字符串类型 1.1.1. CHAR和VARCHAR2类型 CHAR和VARCHAR2类型都是用来表示字符串数据类型,用来在表中存放字符串信息, 比如姓名.职业. ...

  2. IE浏览器版本判断 HTML代码

    <!--[if IE 6.0]> <div id="noie6" style="z-index: 20002;border: 1px solid #F7 ...

  3. 一次erlang 节点CPU严重波动排查

    新服务上线后观察到,CPU在10 ~ 70%间波动严重,但从每秒业务计数器看业务处理速度很平均. 接下来是排查步骤: 1. dstat -tam 大概每10s一个周期,网络流量开始变得很小,随后突然增 ...

  4. 【Django】--Form组件

    Django的Form主要具有一下几大功能: 生成HTML标签 验证用户数据(显示错误信息) HTML Form提交保留上次提交数据 初始化页面显示内容 例子: 1.创建Form类 from djan ...

  5. cornerstone知识点

    CornerStone使用教程(配置SVN,HTTP及svn简单使用) 发布时间:2015-01-02 19:54   作者:芳仔小脚印    来源:开源中国 CornerStone是Mac OS X ...

  6. php json_encode

    1.该函数只接受utf-8编码的字符串,其他编码的字符串会返回false 2.字符串中的斜线'/'会被自动转义成'\/',如果不想被转义,可用如下方式(适用于php5.4及以上) json_encod ...

  7. PHP socket上传文件图片

    最近了解了下下socket方面的东西,想做一个socket上传文件的例子. 在网上搜了搜代码执行后,图片数据传输了一半,图片的下半部分是灰色的.然后就自己仿着搜来的代码和php.net 中socket ...

  8. 用python实现一个不排序的列表功能

    #!/usr/bin/env python # -*- coding: utf-8 -*- # learn <<Problem Solving with Algorithms and Da ...

  9. Solr与MySQL查询性能对比

    本文简单对比下Solr与MySQL的查询性能速度. 测试数据量:10407608     Num Docs: 10407608 这里对MySQL的查询时间都包含了从MySQL Server获取数据的时 ...

  10. UWP学习记录9-设计和UI之控件和模式6

    UWP学习记录9-设计和UI之控件和模式6 1.图形和墨迹 InkCanvas是接收和显示墨迹笔划的控件,是新增的比较复杂的控件,这里先不深入. 而形状(Shape)则是可以显示的各种保留模式图形对象 ...