您的位置:首页 > 运维架构

在Windows下使用OpenGL 2.0的API(包括GLSL)

2009-03-10 05:22 721 查看
在Windows下使用OpenGL 2.0的API(包括GLSL)

网上有许多人都在问一个类似的问题,那就是如何在Windows下使用OpenGL 2.0的API以及OpenGL 2.0中的新特性GLSL。

大家也许都知道,微软为了推广他自己的Direct3D标准,在其Windows操作系统下只提供了OpenGL 1.1的API。而其就算是这个OpenGL 1.1版本也是封装了Direct3D的接口实现的,可见OpenGL在Windows操作系统中已经名存实亡了。

~~~~~~~分割线:下面表达的是我个人的一点点愤慨,你可以直接跳过,而不用有所担心~~~~~~~

众所周知,OpenGL是一个跨平台的开放的标准,她代表的是自由和民主,任何人都可以来实现她,任何人都可以使用它。微软在Windows上对OpenGL的所作所为,是霸权主义的行为,是不得人心的!微软自称招募了世界上最聪明的人,他的野心是统治世界,他妄图为这个世界指定规则,一个永远只对他自己有利的规则。从MFC、C#等等被微软称为先进技术的技术其实都只是为了一件事,他要统治我们(程序员),他要把我们都变成傻瓜!试问,那些只通过拖拖拽拽、点点鼠标,连中学生都能轻易完成的工作有什么技术含量可言?没错,我们都变成了傻瓜,微软的人就永远是最聪明的了。

虽然我还远远不是一个黑客,但我和世界上所有的黑客一样,向往自由和平等。没错,这里不需要什么权威和专家,这里只需要狂热的爱好者,那种对技术、对力量、对真相的渴求永不泯灭!就像《黑客帝国》中展现的那样,我不想被谁控制,我要自由,并依靠自己的力量来找出真相。

以上,虽然有点跑题,但是说道微软我就满腹愤慨,有些人可能会站出来为微软辩解,但是微软的“暴行”还远不止这些,在这里就不一一说了。

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

我可以很负责任的告诉你。在Windows下没有像DirectX那样的OpenGL SDK。那么如何在Windows上使用OpenGL 2.0的API以及GLSL呢?答案是丰富多彩的。你可以通过OpenGL扩展来对OpenGL进行“升级”。但是本文将介绍的方法是,使用一个开源的OpenGL实现——Mesa3D。网上的许多帖子都说Mesa3D是Linux下的OpenGL实现,其实Mesa3D也可以在Windows下面使用(多亏了C语言的机器无关性)。从Mesa3D 7.0版本开始,这个开源的OpenGL实现开始支持OpenGL 2.0标准了。下面将介绍,如何在Windows下配置Mesa3D。

首先,你要到www.mesa3d.org下载源程序包,一般要用到两个包mesaLib.zip和mesaGLUT.zip。值得一题的是,和许多开源项目一样,Mesa3D也只是提供了源代码,并没有提供直接可用的二进制文件,使用者需要重新编译源代码来的到可以使用的二进制文件。下载完成之后,把两个包放在同一个目录下面,直接选择“解压到当前目录...”来解压两个包,默认情况下,两个包被解压到了同一个文件夹下面(比如,Mesa-7.0.3)。然后,按照“/Mesa-7.0.3/windows/VC8”路径找到Visual Studio 2005的解决方案文件(mesa.sln)。打开它,发现这个解决方案中有好多工程(一般是4个,gdi、glu、mesa、osmesa),什么设置也不用修改(默认是Debug目标,而不是Release,千万不要修改),直接分别在右边的“解决方案资源管理器”中右键单击各个工程项,选择“生成”。等待所有的工程都生成成功之后你可以从“/Mesa-7.0.3/lib”这个路径下面得到3个DLL文件(opengl32.dll、glu32.dll、osmesa32.dll)和对应的库文件(*.lib)。同样在“/Mesa-7.0.3/windows/VC8/progs/glut”路径下面,你可找到GLUT的工程文件(glut.vcproj),依照同样的方法,生成GLUT工程。之后可以在“/Mesa-7.0.3/lib”这个路径下找到glut32.dll以及相应的库文件。

好了OpenGL 2.0的DLL和相应的库文件就全都得到了。编程的时候所需的所有头文件可以在“Mesa-7.0.3/include”这个路径下找到(或者你干脆就把这个目录设置成Visual Studio的include搜索目录)。

这里需要注意一点,由于编程时要对gl.h、glu.h等头文件进行#include进行引用,这些头文件会和Visual Studio中自带的gl.h、glu.h等头文件冲突,所以最好删除Visual Studio中的相应文件(建议对这些文件备份);同理,Visual Studio中的opengl32.lib文件也要删掉(建议备份)。

好了,就讲到这里,好好享用吧!

详见
http://i.cn.yahoo.com/aokman/blog/p_9/


sea_bug 2008-4-23 10:24:43

注册: 2006-3 状态: Offline1 Top
r2power
Exp:58



侦察兵


发表于: 2008-4-23 21:11:00档案 | 短信 | 树状 | 收藏 | 编辑 | 删除 | 引用
Re:如何在Windows下使用OpenGL 2.0的API(包括GLSL)

对于LZ这份对opengl的执着致敬~~
---------------------------------


r2power 2008-4-23 21:12:36

注册: 2006-9 状态: Offline2 Top
math3DID
Exp:64



侦察兵


发表于: 2008-4-23 21:56:00档案 | Email | 短信 | 树状 | 收藏 | 编辑 | 删除 | 引用
Re:如何在Windows下使用OpenGL 2.0的API(包括GLSL)

致敬致敬

注册: 2006-11 状态: Offline3 Top
lingjingqiu
Exp:2124



骑士中尉


发表于: 2008-4-28 13:17:00档案 | Email | 短信 | 树状 | 收藏 | 编辑 | 删除 | 引用
Re:如何在Windows下使用OpenGL 2.0的API(包括GLSL)

....Mesa是个软渲染器。。。。

注册: 2004-4 状态: Offline4 Top
LangFox
Exp:67



侦察兵


发表于: 2008-4-28 17:05:00档案 | 短信 | 树状 | 收藏 | 编辑 | 删除 | 引用
Re: 如何在Windows下使用OpenGL 2.0的API(包括GLSL)

如果是在windows下,我建议使用glew或glext等扩展库,它只提供OGL的接口,窗口可以自己用win32/mfc/wtl来写,而不必用到glut。

GLEW: The OpenGL Extension Wrangler Library
glew.sourceforge.net/

glext http://developer.nvidia.com/object/nvidia_opengl_specs.html
OpenGL SDK(包括文档、样例、工具等等) http://www.opengl.org/sdk/
ps,OGL接口的扩展库很多,可以根据自己喜好来使用。

注册: 2003-12 状态: Offline5 Top
lilei9110
Exp:11



新成员


发表于: 2008-4-30 21:09:00档案 | Email | 短信 | 树状 | 收藏 | 编辑 | 删除 | 引用
Re: Re:如何在Windows下使用OpenGL 2.0的API(包括GLSL)

lingjingqiu: Re:如何在Windows下使用OpenGL 2.0的API(包括GLSL)

....Mesa是个软渲染器。。。。

这位兄台听谁说的??
《OpenGL Super Bible 4th Edition》的“Wiggle: OpenGL on Windows”一节中提到Mesa3D属于Mini-Driver的一种,而对于Mini-Driver,该书做出了下面的阐述:
Mini-Driver

A mini-driver is not a real display driver. Instead, it is a drop-in replacement for opengl32.dll that makes calls to a hardware vendor’s proprietary 3D hardware driver.Typically, these mini-drivers convert OpenGL calls to roughly equivalent calls in a vendor’s proprietary 3D API. The first mini-driver was written by 3dfx for its Voodoo graphics card. This DLL drop-in converted OpenGL calls into the Voodoo’s native Glide (the 3dfx 3D API) programming interface.Although mini-drivers popularized OpenGL for games, they often had missing OpenGL functions or features. Any application that used OpenGL did not necessarily work with a mini-driver. Typically, these drivers provided only the barest functionality needed to run a popular game. Though not widely documented, Microsoft even made an OpenGL to D3D translation layer that was used on Windows XP to accelerate some games when an ICD was not present. Fortunately, the widespread popularity of OpenGL has made the minidriver obsolete on newer commodity PCs.

由此可见,这位仁兄说Mesa3D是软渲染器是不正确的。Mini-Driver只是简单地调用硬件厂商提供的硬件驱动程序中提供的3D API,而凡是严格按照OpenGL 2.0标准规范设计的硬件驱动程序,其提供的API其原型应该都是一样的(内部实现由硬件厂商决定)。


lilei9110 2008-4-30 21:27:28

注册: 2006-3 状态: Offline6 Top
lilei9110
Exp:11



新成员


发表于: 2008-4-30 21:22:00档案 | Email | 短信 | 树状 | 收藏 | 编辑 | 删除 | 引用
Re: Re: 如何在Windows下使用OpenGL 2.0的API(包括GLSL)

LangFox: Re: 如何在Windows下使用OpenGL 2.0的API(包括GLSL)

如果是在windows下,我建议使用glew或glext等扩展库,它只提供OGL的接口,窗口可以自己用win32/mfc/wtl来写...

这位仁兄说得没错。OpenGL是可一通过扩展库升级,但是,这样升级出来的函数一般和OpenGL标准中定义的函数原型有所出入。对于初学者来说可能会造成一定的混淆,也可能对初学者造成学习障碍。

而Mesa3D 7.0+完全是按照OpenGL 2.0的标准开发的,所以和市面上或者是网上的关于OpenGL 2.0的书籍中介绍的内容基本上是完全相符的。这使初学者上手非常容易。

虽说,Mesa3D在Windows上使用的是GDI Driver。但是,个人感觉效率不会差到那里去,说不定还比Managed Direct3D的效率高些。

还有就是,id software公司已经把Mesa3D作为其在Linux平台上开发游戏的API,所以请大家相信Mesa3D API的品质。

注册: 2006-3 状态: Offline7 Top
w2004
Exp:19



新成员


发表于: 2008-5-4 19:01:00档案 | Email | 短信 | 树状 | 收藏 | 编辑 | 删除 | 引用
Re:如何在Windows下使用OpenGL 2.0的API(包括GLSL)

mesa3D在windows里面开不了硬件加速,不是一般慢,但在linux里面倒是可以的。

注册: 2008-4 状态: Offline8 Top
w2004
Exp:19



新成员


发表于: 2008-5-4 19:03:00档案 | Email | 短信 | 树状 | 收藏 | 编辑 | 删除 | 引用
Re: Re: Re: 如何在Windows下使用OpenGL 2.0的API(包括GLSL)

lilei9110: Re: Re: 如何在Windows下使用OpenGL 2.0的API(包括GLSL)
这位仁兄说得没错。OpenGL是可一通过扩展库升级,但是,这样升级出来的函数一般和OpenGL标准中定义的函数...
不巧,试过了,在winxp里面,Managed D3D跟mesa3D相比,不止是快一点点,因为后者是基于GDI的,慢的不行


注册: 2008-4 状态: Offline9 Top
carmark
Exp:11



新成员


发表于: 2008-5-5 15:36:00档案 | Email | 短信 | 树状 | 收藏 | 编辑 | 删除 | 引用
Re:如何在Windows下使用OpenGL 2.0的API(包括GLSL)

偶也推荐除了图形的任何东东直接调用API,效率至上,真搞不懂,为什么官方就不出个OpenglSDK呢?难道这就这么困难吗?

注册: 2007-12 状态: Offline10 Top
w2004
Exp:19



新成员


发表于: 2008-5-5 16:00:00档案 | Email | 短信 | 树状 | 收藏 | 编辑 | 删除 | 引用
Re: Re:如何在Windows下使用OpenGL 2.0的API(包括GLSL)

carmark: Re:如何在Windows下使用OpenGL 2.0的API(包括GLSL)

偶也推荐除了图形的任何东东直接调用API,效率至上,真搞不懂,为什么官方就不出个OpenglSDK呢?难道这就这么困难吗?

开放的代价就是混沌。

注册: 2008-4 状态: Offline11 Top
skyman
Exp:1



新成员


发表于: 2008-5-15 20:31:00档案 | Email | 短信 | 树状 | 收藏 | 编辑 | 删除 | 引用
Re:如何在Windows下使用OpenGL 2.0的API(包括GLSL)

用glew就可以了,它提供一个接口,既支持opengl2.1的标准,也支持各gpu的特殊扩展。只使用标准内容(包含glsl)开发的话,完全可以跨操作系统和跨gpu。另外,它是直接调用显卡驱动中opengl程序的,所以可充分使用硬件加速,性能完全可与d3d9c相比。我在winxp中用,没发现性能或质量问题。glew也被包含入nvidia的sdk包中。


skyman 2008-5-15 20:35:10

注册: 2008-5 状态: Offline12 Top
srdrm
Exp:40



侦察兵


发表于: 2008-5-15 22:36:00档案 | Email | 短信 | 树状 | 收藏 | 编辑 | 删除 | 引用
Re:如何在Windows下使用OpenGL 2.0的API(包括GLSL)

这个应该还需要跟相应的显卡配合吧.不过我也不大清楚. 目前想研究研究图形引擎这块了

注册: 2006-6 状态: Offline13 Top
hzhzzhouqq
Exp:50



侦察兵


发表于: 2008-6-27 11:42:00档案 | Email | 短信 | 树状 | 收藏 | 编辑 | 删除 | 引用
Re: 如何在Windows下使用OpenGL 2.0的API(包括GLSL)

顶一下. 以前都是自己定义的扩展. 下次可以试下. 不管好不好, 都要谢谢楼主.

注册: 2006-9 状态: Offline14 Top
lilei9110
Exp:11



新成员


发表于: 2008-7-11 9:12:00档案 | Email | 短信 | 树状 | 收藏 | 编辑 | 删除 | 引用
Re:如何在Windows下使用OpenGL 2.0的API(包括GLSL)

经过考察。开源的GLEW确实不错。可以支持OpenGL 2.0的API(包括GLSL),而且API原型也和标准一模一样。不过前提是显卡驱动程序必须支持OpenGL 2.0的标准。你可以通过GLEW提供的工具来测试显卡驱动是否支持OpenGL 2.0标准。如果不支持,则需要对显卡驱动进行升级。驱动升级可以到ATi(AMD)和nVidia的官方网站上获得。

注册: 2006-3 状态: Offline15 Top
LangFox
Exp:67



侦察兵


发表于: 2008-7-23 16:30:00档案 | 短信 | 树状 | 收藏 | 编辑 | 删除 | 引用
Re:如何在Windows下使用OpenGL 2.0的API(包括GLSL)

刚好看到一本书《OpenGL Game Development》(2005)里面提到了OpenGL和Mesa的关系,随便看看:

Mesa is an opensource implementation of the OpenGL API created by Brian Paul.
Although not officially endorsed by SGI, Mesa provides an OpenGL-like API to
platforms that do not have a true OpenGL library from SGI.

When Mesa development began, Brian Paul had been granted permission by SGI to
use the command structure and syntax of OpenGL. Because Mesa is not
officially affiliated with SGI, there is no guarantee that source code
written for Mesa will compile and run properly. Also, the name of the API
could not use “Open” or “GL.” If you are wondering where the name Mesa
came from, Brian has indicated on the official Mesa site that “the name Mesa
just popped into my head one day.”

Although the Mesa documentation states that Mesa does not guarantee
compatibility with OpenGL, it has passed conformance tests. From my
experience, I’ve found that regular OpenGL runs properly under Mesa. The
latest version of Mesa, version 5.0, is compatible with the latest release of
OpenGL, version 1.4. Each major release of Mesa follows a minor release for OpenGL. The following timeline displays OpenGL and Mesa release dates for
their respective versions. This timeline can come in handy for tracking the
progress of both APIs.

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: