VC++配置OpenGL开发环境160612.docx

上传人:b****3 文档编号:3461412 上传时间:2022-11-23 格式:DOCX 页数:14 大小:45.60KB
下载 相关 举报
VC++配置OpenGL开发环境160612.docx_第1页
第1页 / 共14页
VC++配置OpenGL开发环境160612.docx_第2页
第2页 / 共14页
VC++配置OpenGL开发环境160612.docx_第3页
第3页 / 共14页
VC++配置OpenGL开发环境160612.docx_第4页
第4页 / 共14页
VC++配置OpenGL开发环境160612.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

VC++配置OpenGL开发环境160612.docx

《VC++配置OpenGL开发环境160612.docx》由会员分享,可在线阅读,更多相关《VC++配置OpenGL开发环境160612.docx(14页珍藏版)》请在冰豆网上搜索。

VC++配置OpenGL开发环境160612.docx

VC++配置OpenGL开发环境160612

VC++配置

OpenGL开发环境

Hanford

2016年06月12日

目录

第1章配置1

第2章核心文件5

2.1核心文件5

2.2编译时使用核心文件5

2.3运行时使用核心文件6

2.4依赖关系6

第3章AUX7

3.1AUX的作用7

3.2使用AUX7

第4章GLUT8

4.1GLUT的作用8

4.2相关文件8

4.3使用GLUT8

4.4编译GLUT9

4.5替代产品9

第5章GLEXT10

5.1GLEXT的作用10

5.2相关文件10

5.3使用GLEXT10

5.3.1使用wglGetProcAddress11

5.3.2使用glext.dll导出函数11

第6章GLEW13

6.1相关文件13

6.2使用GLEW13

第1章配置

配置就是将OpenGL的头文件(*.h)、库文件(*.lib)、动态库文件(*.dll)复制到相应的目录内。

如下图所示,有三个文件夹和三个批处理文件。

图1.1

文件夹bin用来存放*.dll文件,如:

glut32.dll。

注意:

32位的dll文件存放在x86子目录内;64位的dll文件存放在x64子目录内。

文件夹inc用来存放*.h文件,如:

glew.h。

文件夹lib用来存放*.lib文件,如:

glut32.lib。

注意:

32位的lib文件存放在x86子目录内;64位的lib文件存放在x64子目录内。

注意:

本文不考虑安腾处理器(Itanium)。

运行setup.bat,将把bin、inc、lib内的文件复制到相应的目录内。

其内容如下所示:

ifdefinedProgramFiles(x86)gotox64

callx86

goto:

eof

:

x64

callx64

setup.bat的工作为判断环境变量ProgramFiles(x86)是否已被定义。

如果该环境变量已被定义,说明操作系统是64位的,将运行x64.bat;如果该环境变量未被定义,说明操作系统是32位的,将运行x86.bat。

x86.bat的内容如下

remcopy*.dll

xcopy.\bin\x86\*.dll%windir%\System32/Y/R

:

vc6

setvcPath="%ProgramFiles%\MicrosoftVisualStudio\VC98"

ifnotexist%vcPath%gotovc2002

xcopy.\inc\*.h%vcPath%\Include\GL/Y/R

xcopy.\lib\x86\*.lib%vcPath%\Lib/Y/R

:

vc2002

setvcPath="%ProgramFiles%\MicrosoftVisualStudio.NET\Vc7\PlatformSDK"

ifnotexist%vcPath%gotovc2003

xcopy.\inc\*.h%vcPath%\Include\GL/Y/R

xcopy.\lib\x86\*.lib%vcPath%\Lib/Y/R

:

vc2003

setvcPath="%ProgramFiles%\MicrosoftVisualStudio.NET2003\Vc7\PlatformSDK"

ifnotexist%vcPath%gotovc2005

xcopy.\inc\*.h%vcPath%\Include\GL/Y/R

xcopy.\lib\x86\*.lib%vcPath%\Lib/Y/R

:

vc2005

setvcPath="%ProgramFiles%\MicrosoftVisualStudio8\VC\PlatformSDK"

ifnotexist%vcPath%gotovc2008

xcopy.\inc\*.h%vcPath%\Include\GL/Y/R

xcopy.\lib\x86\*.lib%vcPath%\Lib/Y/R

:

vc2008

setvcPath="%ProgramFiles%\MicrosoftSDKs\Windows\v6.0A"

ifnotexist%vcPath%gotovc2010

xcopy.\inc\*.h%vcPath%\Include\GL/Y/R

xcopy.\lib\x86\*.lib%vcPath%\Lib/Y/R

:

vc2010

setvcPath="%ProgramFiles%\MicrosoftSDKs\Windows\v7.0A"

ifnotexist%vcPath%gotovc2012

xcopy.\inc\*.h%vcPath%\Include\GL/Y/R

xcopy.\lib\x86\*.lib%vcPath%\Lib/Y/R

xcopy.\lib\x64\*.lib%vcPath%\Lib\x64/Y/R

:

vc2012

setvcPath="%ProgramFiles%\MicrosoftSDKs\Windows\v7.1A"

ifnotexist%vcPath%gotovc2015

xcopy.\inc\*.h%vcPath%\Include\GL/Y/R

xcopy.\lib\x86\*.lib%vcPath%\Lib/Y/R

:

vc2015

setvcPath="%ProgramFiles%\WindowsKits\8.1\Include\um\GL"

ifnotexist%vcPath%gotovc20XX

xcopy.\inc\*.h%vcPath%/Y/R

xcopy.\lib\x86\*.lib%ProgramFiles%\WindowsKits\8.0\Lib\win8\um\x86/Y/R

xcopy.\lib\x86\*.lib%ProgramFiles%\WindowsKits\8.1\Lib\winv6.3\um\x86/Y/R

xcopy.\lib\x64\*.lib%ProgramFiles%\WindowsKits\8.0\Lib\win8\um\x64/Y/R

xcopy.\lib\x64\*.lib%ProgramFiles%\WindowsKits\8.1\Lib\winv6.3\um\x64/Y/R

:

vc20XX

x64.bat的内容如下

remcopy*.dll

xcopy.\bin\x86\*.dll%windir%\SysWOW64/Y/R

xcopy.\bin\x64\*.dll%windir%\System32/Y/R

:

vc6

setvcPath="%ProgramFiles(x86)%\MicrosoftVisualStudio\VC98"

ifnotexist%vcPath%gotovc2002

xcopy.\inc\*.h%vcPath%\Include\GL/Y/R

xcopy.\lib\x86\*.lib%vcPath%\Lib/Y/R

:

vc2002

setvcPath="%ProgramFiles(x86)%\MicrosoftVisualStudio.NET\Vc7\PlatformSDK"

ifnotexist%vcPath%gotovc2003

xcopy.\inc\*.h%vcPath%\Include\GL/Y/R

xcopy.\lib\x86\*.lib%vcPath%\Lib/Y/R

:

vc2003

setvcPath="%ProgramFiles(x86)%\MicrosoftVisualStudio.NET2003\Vc7\PlatformSDK"

ifnotexist%vcPath%gotovc2005

xcopy.\inc\*.h%vcPath%\Include\GL/Y/R

xcopy.\lib\x86\*.lib%vcPath%\Lib/Y/R

:

vc2005

setvcPath="%ProgramFiles(x86)%\MicrosoftVisualStudio8\VC\PlatformSDK"

ifnotexist%vcPath%gotovc2008

xcopy.\inc\*.h%vcPath%\Include\GL/Y/R

xcopy.\lib\x86\*.lib%vcPath%\Lib/Y/R

:

vc2008

setvcPath="%ProgramFiles%\MicrosoftSDKs\Windows\v6.0A"

ifnotexist%vcPath%gotovc2010

xcopy.\inc\*.h%vcPath%\Include\GL/Y/R

xcopy.\lib\x86\*.lib%vcPath%\Lib/Y/R

xcopy.\lib\x64\*.lib%vcPath%\Lib\x64/Y/R

:

vc2010

setvcPath="%ProgramFiles(x86)%\MicrosoftSDKs\Windows\v7.0A"

ifnotexist%vcPath%gotovc2012

xcopy.\inc\*.h%vcPath%\Include\GL/Y/R

xcopy.\lib\x86\*.lib%vcPath%\Lib/Y/R

xcopy.\lib\x64\*.lib%vcPath%\Lib\x64/Y/R

:

vc2012

setvcPath="%ProgramFiles(x86)%\MicrosoftSDKs\Windows\v7.1A"

ifnotexist%vcPath%gotovc2015

xcopy.\inc\*.h%vcPath%\Include\GL/Y/R

xcopy.\lib\x86\*.lib%vcPath%\Lib/Y/R

:

vc2015

setvcPath="%ProgramFiles(x86)%\WindowsKits\8.1\Include\um\GL"

ifnotexist%vcPath%gotovc20XX

xcopy.\inc\*.h%vcPath%/Y/R

xcopy.\lib\x86\*.lib%ProgramFiles(x86)%\WindowsKits\8.0\Lib\win8\um\x86/Y/R

xcopy.\lib\x86\*.lib%ProgramFiles(x86)%\WindowsKits\8.1\Lib\winv6.3\um\x86/Y/R

xcopy.\lib\x64\*.lib%ProgramFiles(x86)%\WindowsKits\8.0\Lib\win8\um\x64/Y/R

xcopy.\lib\x64\*.lib%ProgramFiles(x86)%\WindowsKits\8.1\Lib\winv6.3\um\x64/Y/R

:

vc20XX

注意:

1、x64.bat中vc2008是比较特殊的:

它的目标目录是%ProgramFiles%,而不是%ProgramFiles(x86)%;

2、vc2013与vc2012的目标目录一致。

第2章核心文件

2.1核心文件

核心文件有6个,如下表所示:

头文件

库文件

动态库文件

gl.h

opengl32.lib

opengl32.dll

glu.h

glu32.lib

glu32.dll

以gl开头的OpenGL函数,一般都被封装在opengl32.dll内。

编程时,需要包含gl.h,编译时需要链接opengl32.lib。

以glu开头的OpenGL函数,一般都被封装在glu32.dll内。

编程时,需要包含glu.h,编译时需要链接glu32.lib。

vc6至vc2015自带gl.h、glu.h、opengl32.lib、glu32.lib这四个文件。

其中的lib文件还分为x86、x64、IA64(Itanium)三个版本。

Windows系统自带opengl32.dll和glu32.dll。

这两个文件的使用,下文会进行说明。

注意:

VC++自带的*.h、*.lib,其版本为1.1;Windows自带的*.dll,其版本从1.1到3.X。

要使用OpenGL2.X至3.X新增的函数,需要另行处理,详见下文。

2.2编译时使用核心文件

编译时核心文件的使用请参考如下面代码:

#include

#include

#include

#pragmacomment(lib,"opengl32.lib")

#pragmacomment(lib,"glu32.lib")

即包含头文件gl.h和glu.h,链接时使用opengl32.lib和glu32.lib。

注意:

网上下载的压缩包内有时能够发现这些文件:

opengl.lib、opengl.dll、glu.lib、glu.dll,它们与opengl32.lib、opengl32.dll、glu32.lib、glu32.dll的区别为:

前者是SGI实现的OpenGL,后者是微软实现的OpenGL。

2.3运行时使用核心文件

编译生成的.exe文件,在运行时需要opengl32.dll和glu32.dll这两个文件。

这两个文件Windows系统自带。

32位操作系统下,它们位于%windir%\System32目录下,即一般位于C:

\Windows\System32。

64位操作系统下,32位程序与64位程序所需要的opengl32.dll、glu32.dll分为两套:

64位的dll文件位于%windir%\System32;32位的dll文件位于%windir%\SysWOW64。

Windows自带的OpenGL版本都较低,如:

Win7下OpenGL的版本为3.X。

如果想使用OpenGL4.X,比较好的办法是:

将编译好的opengl32.dll、glu32.dll和.exe文件放在同一目录内。

2.4依赖关系

opengl32.dll和glu32.dll在运行时是相互依赖的,即opengl32.dll导入了glu32.dll内部的一些函数,glu32.dll也导入了opengl32.dll内部的一些函数。

如下图所示:

图2.1

第3章AUX

首先需要说明的是:

AUX是OpenGL1.0使用的辅助库,它已经过时。

新编写的OpenGL程序里最好不要再使用它。

3.1AUX的作用

直接使用gl和glu编写OpenGL程序,是一件比较繁琐的工作。

以NeHeOpenGL教程第一课的代码为例,什么都没有绘制的代码量就将近四百行了。

AUX辅助库的作用就是为了简化OpenGL的编码。

3.2使用AUX

AUX相关文件有两个:

glaux.h、glaux.lib。

其中glaux.lib是静态库,所以运行时不再需要glaux.dll。

vc6至vc2015自带这两个文件,所以无需再下载。

下面是使用AUX的示例代码。

它只有二十行左右,大大简化了编码。

#include

#include

#pragmacomment(lib,"OpenGL32.lib")

#include

#pragmacomment(lib,"glaux.lib")

intmain(intargc,char**argv)

{

auxInitDisplayMode(AUX_SINGLE|AUX_RGB);

auxInitPosition(0,0,500,500);

auxInitWindow(argv[0]);

glBegin(GL_LINE_STRIP);

glVertex2f(-0.5,-0.5);

glVertex2f(-0.5,0.5);

glEnd();

glFlush();

Sleep(10000);

return0;

}

第4章GLUT

4.1GLUT的作用

从OpenGL1.1开始,出现了GLUT(OpenGLUtilityTookit)。

它与AUX的作用类似,也是为了简化OpenGL编码。

此外,由它编写的代码还能够实现跨平台。

可以将GLUT看做是AUX的升级版。

4.2相关文件

GLUT相关文件有三个:

glut.h、glut32.lib、glut32.dll。

VC++和Windows系统不自带这些文件,需要下载。

网址为:

http:

//www.opengl.org/resources/libraries/glut/glutdlls37beta.zip

解压后,将glut.h复制到图1.1中的inc目录;将glut32.lib复制到图1.1中的lib\x86目录;将glut32.dll复制到图1.1中的bin\x86目录。

然后运行setup.bat,复制文件到相应的目录内。

4.3使用GLUT

使用GLUT非常简单,只要包含glut.h头文件即可,即:

#include

如下内容节选自glut.h

#include

#include

#include

#ifdefGLUT_USE_SGI_OPENGL

#pragmacomment(lib,"opengl.lib")

#pragmacomment(lib,"glu.lib")

#pragmacomment(lib,"glut.lib")

#else

#pragmacomment(lib,"opengl32.lib")

#pragmacomment(lib,"glu32.lib")

#pragmacomment(lib,"glut32.lib")

#endif

可见:

1、自动包含gl.h和glu.h;

2、自动链接opengl32.lib、glu32.lib、glut32.lib。

4.4编译GLUT

glutdlls37beta.zip里没有64位的glut32.lib、glut32.dll。

此时有两种解决方案:

一是下载64位的glut32.lib、glut32.dll;二是下载GLUT的源代码(如:

glut-3.7.6-src.zip),然后重新编译一遍。

有了源代码,还可以编译生成静态库,这样在运行程序时就不再需要glut32.dll了。

4.5替代产品

GLUT也是一款较老的产品,它的源代码早已不再更新。

如果想编译GLUT,又找不到源代码,就可以使用一些替代产品,如:

Freeglut。

Freeglut的下载地址如下:

第5章GLEXT

首先需要说明的是:

GLEXT已经过时,可用GLEW代替它。

5.1GLEXT的作用

上文提到:

VC++自带的*.h、*.lib,其版本为1.1;Windows自带的*.dll,其版本从1.1到3.X。

这就产生一个问题:

OpenGL32.dll里可能有某些函数(如:

glTexImage3D),在gl.h和OpenGL32.lib里没有相应的声明,导致程序无法使用这些函数。

GLEXT就是用来扩展gl.h和OpenGL32.lib的,经过扩展后就可以使用OpenGL32.dll里的高版本函数了。

5.2相关文件

GLEXT的相关文件:

glcorearb.h、glext.h、wglext.h、glext.lib、glext.dll。

glcorearb.h似乎没有什么用处。

glext.h里包含了以gl开头的函数声明,这些函数都是gl.h里所没有声明的函数,也就是从OpenGL1.2开始逐步增加的函数。

wglext.h里包含了以wgl开头的函数声明,这些函数只能在Windows平台上使用。

VC++和Windows系统不自带这些文件,需要下载。

网址为:

下载glext.zip,解压后将glext.h、wglext.h复制到图1.1中的inc目录;将glext.lib复制到图1.1中的lib\x86目录;将glext.dll复制到图1.1中的bin\x86目录。

然后运行setup.bat,复制文件到相应的目录内。

如果想自己编译生成glext.lib、glext.dll,可在上述网址下载glext_src.zip。

5.3使用GLEXT

下面以使用OpenGL1.2里的函数glTexImage3D为例,说明如何使用GLEXT。

一共有两种方法。

5.3.1使用wglGetProcAddress

参考如下代码:

#include

#include

#include

#pragmacomment(lib,"opengl32.lib")

#pragmacomment(lib,"glu32.lib")

#include

#pragmacomment(lib,"glext.lib")

voidinit(void)

{

PFNGLTEXIMAGE3DPROCpfn=

(PFNGLTEXIMAGE3DPROC)wglGetProcAddress("glTexImage3D");

if(pfn)

{

(*pfn)(GL_TEXTURE_3D,0,GL_RGB,iWidth,iHeight

iDepth,0,GL_RGB,GL_UNSIGNED_BYTE,image);

}

}

语句(PFNGLTEXIMAGE3DPROC)wglGetProcAddress("glTexImage3D")从OpenGL32.dll里找到函数glTexImage3D的地址,将其强制转换为PFNGLTEXIMAGE3DPROC型的函数指针。

接下来的(*pfn)(...);相当于调用glTexImage3D。

5.3.2使用glext.dll导出函数

参考如下代码:

#include

#include

#include

#pragmacomment(lib,"opengl32.lib")

#pragmacomment(lib,"glu32.lib")

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 城乡园林规划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1