日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

OpenGL版本与OpenGL扩展机制

發(fā)布時(shí)間:2023/12/10 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 OpenGL版本与OpenGL扩展机制 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1 opengl的版本區(qū)別(在opengl官方文檔中有詳細(xì)說(shuō)明)
????針對(duì)Opengl不同版本的升級(jí)是主要是擴(kuò)展指令集。
????現(xiàn)在版本是4.0啦
1.1 opengl1.1
1995年,SGI推出了更為完善的OpenGL 1.1版本。OpenGL 1.1的性能比1.0版提高甚多。其中包括改進(jìn)打印機(jī)支持,在增強(qiáng)元文件中包含OpenGL的調(diào)用,頂點(diǎn)數(shù)組的新特性,提高頂點(diǎn)位置、法線(xiàn)、顏色、色彩指數(shù)、紋理坐標(biāo)、多邊形邊緣標(biāo)識(shí)的傳輸速度,引入了新的紋理特性等等。
1.2 opengl1.3
2001年8月,ARB發(fā)布OpenGL 1.3規(guī)范,它增加了立方紋理貼圖、紋理環(huán)境、多重采樣、紋理框架壓縮等擴(kuò)展指令,但是改進(jìn)程度非常有限。?
1.3 opengl1.4
2002年7月,ARB正式發(fā)布OpenGL 1.4,它也只加入了深度紋理/陰影紋理、頂點(diǎn)設(shè)計(jì)框架、自動(dòng)紋理貼圖等簡(jiǎn)單的功能。?
1.3 opengl1.5
2003年的7月,ARB公布OpenGL 1.5規(guī)范。OpenGL 1.5內(nèi)包含ARB制定的“正式擴(kuò)展規(guī)格繪制語(yǔ)言”(OpenGL Shading Language v1.0),該語(yǔ)言用于著色對(duì)象、頂點(diǎn)著色、片斷著色等擴(kuò)展功能,同時(shí)也將作為下一代OpenGL 2.0版本的內(nèi)核。OpenGL 1.5的變化還增加了頂點(diǎn)緩沖對(duì)象(可提高透視性能)、非乘方紋理(可提高紋理內(nèi)存的使用效率)以及陰影功能、隱蔽查詢(xún)功能等等。其主要內(nèi)容包括
l???????? 頂點(diǎn)Buffer Object:進(jìn)行頂點(diǎn)配列方式可以提高透視性能
l???????? Shadow功能:增加用來(lái)比較Shadow映射的函數(shù)
l???????? 隱蔽查詢(xún)(QUERY):為提高Curling性能采用非同步隱蔽測(cè)試
l???????? 非乘方紋理(Texture):提高mipmap等紋理內(nèi)存的使用效率
l???????? OpenGL Shading Language v.1.0:用于著色(shader)對(duì)象、頂點(diǎn)著色以及片斷著色技術(shù)(fragment shader )的擴(kuò)展功能?
1.4 opengl2.0
OpenGL 1.0推出后的相當(dāng)長(zhǎng)的一段時(shí)間里,OpenGL唯一做的只是增加了一些擴(kuò)展指令集,這些擴(kuò)展指令是一些繪圖功能,像是ClearCoat、Multisample、視頻及繪圖的整合工具(某些是通過(guò)OpenML的努力而開(kāi)發(fā)出來(lái)的,它本身屬于OpenGL ARB擴(kuò)展指令之一。
已經(jīng)推出opengl2.0。OpenGL 2.0將在OpenGL 1.3基礎(chǔ)上進(jìn)行修改擴(kuò)充、但它將有下面五個(gè)方面的重大改進(jìn):①?gòu)?fù)雜的核心被徹底精簡(jiǎn);②完全的硬件可編程能力;③改進(jìn)的內(nèi)存管理機(jī)制、支持高級(jí)像素處理;④擴(kuò)展至數(shù)字媒體領(lǐng)域,使之跨越高端圖形和多媒體范疇;⑤支持嵌入式圖形應(yīng)用。
為了在獲得強(qiáng)大功能的同時(shí)保持理想的兼容性,OpenGL 2.0經(jīng)歷以下兩個(gè)發(fā)展階段:第一個(gè)階段注重兼容能力和平滑過(guò)渡,為此,OpenGL 2.0核心將在精簡(jiǎn)后的OpenGL 1.3功能模塊的基礎(chǔ)上加上可完全兼容的新功能共同組成,這種做法在滿(mǎn)足兼容性的同時(shí),還可將原有OpenGL中數(shù)量眾多、且相互糾纏不清的擴(kuò)展指令進(jìn)行徹底精簡(jiǎn)。 第一階段的任務(wù)只是為了過(guò)渡,而第二階段才是OpenGL 2.0的真正成熟期。此時(shí),ARB將合成出一個(gè)“純OpenGL 2.0”內(nèi)核,純內(nèi)核將包含更多新增加的“精簡(jiǎn)型API函數(shù)”,這些函數(shù)具有完全的可編程特性、結(jié)構(gòu)簡(jiǎn)單高效、功能強(qiáng)大且應(yīng)用靈活。除了完成這項(xiàng)任務(wù)外,ARB組織還得指導(dǎo)開(kāi)發(fā)商拋棄繁瑣的OpenGL 1.X、轉(zhuǎn)用更具彈性的“純OpenGL 2.0”。?
2 OpenGL擴(kuò)展(OpenGL Extensions)
OpenGL和Direct3D比較起來(lái),最大的一個(gè)長(zhǎng)處就是其擴(kuò)展機(jī)制。硬件廠商開(kāi)發(fā)出一個(gè)新功能,可以針對(duì)新功能開(kāi)發(fā)OpenGL擴(kuò)展,軟件開(kāi)發(fā)人員通過(guò)這個(gè)擴(kuò)展就可以使用新的硬件功能。所以雖然顯卡的發(fā)展速度比OpenGL版本更新速度快得多,但程序員仍然可以通過(guò)OpenGL使用最新的硬件功能。而Direct3D則沒(méi)有擴(kuò)展機(jī)制,硬件的新功能要等到微軟發(fā)布新版DirectX后才可能支持。
????OpenGL擴(kuò)展也不是沒(méi)有缺點(diǎn),正因?yàn)楦鱾€(gè)硬件廠商都可以開(kāi)發(fā)自己的擴(kuò)展,所以擴(kuò)展的數(shù)目比較大,而且有點(diǎn)混亂,有些擴(kuò)展實(shí)現(xiàn)的相同的功能,可因?yàn)槭遣煌瑥S商開(kāi)發(fā)的,接口卻不一樣,所以程序中為了實(shí)現(xiàn)這個(gè)功能,往往要為不同的顯卡寫(xiě)不同的程序。這個(gè)問(wèn)題在OpenGL 2.0出來(lái)后可能會(huì)得到解決,OpenGL 2.0的一個(gè)目標(biāo)就是統(tǒng)一擴(kuò)展,減少擴(kuò)展數(shù)目。?
2.1 擴(kuò)展名
每個(gè)擴(kuò)展都有一個(gè)擴(kuò)展名,擴(kuò)展名類(lèi)似如下形式:
?????????????????????? GL_ARB_multitexture
第一段GL,用來(lái)表示針對(duì)OpenGL哪部分開(kāi)發(fā)的擴(kuò)展,有以下幾個(gè)值:
GL??– 針對(duì)OpenGL核心的擴(kuò)展
WGL – 針對(duì)Windows平臺(tái)的擴(kuò)展
GLX – 針對(duì)Unix / Linux平臺(tái)的擴(kuò)展
GLU – 針對(duì)OpenGL Utility Library的擴(kuò)展
第二段ARB,用來(lái)表示是誰(shuí)開(kāi)發(fā)的這個(gè)擴(kuò)展,常見(jiàn)以下幾個(gè)值:
ARB – 經(jīng)OpenGL Architecture Review Board(OpenGL管理機(jī)構(gòu))正式核準(zhǔn)的擴(kuò)展,往往由廠商開(kāi)發(fā)的擴(kuò)展發(fā)展而來(lái),如果同時(shí)存在廠商開(kāi)發(fā)的擴(kuò)展和ARB擴(kuò)展,應(yīng)該優(yōu)先使用ARB擴(kuò)展?
EXT – 被多個(gè)硬件廠商支持的擴(kuò)展
NV??– nVIDIA 公司開(kāi)發(fā)的擴(kuò)展
ATI – ATI公司開(kāi)發(fā)的擴(kuò)展
ATIX– ATI公司開(kāi)發(fā)的實(shí)驗(yàn)性擴(kuò)展
SGI – Silicon Graphics(SGI)公司開(kāi)發(fā)的擴(kuò)展
SGIX– Silicon Graphics(SGI)公司開(kāi)發(fā)的實(shí)驗(yàn)性擴(kuò)展
第三段multitexture就是真正的擴(kuò)展名了,如multitexture就是多重紋理擴(kuò)展。?
2.2使用OpenGL擴(kuò)展
???? 要使用一個(gè)OpenGL擴(kuò)展,首先必須檢查顯卡是否支持這個(gè)擴(kuò)展,以下代碼可以獲取一個(gè)顯卡支持的的OpenGL擴(kuò)展:
const char *str = glGetString( GL_EXTENSIONS );
函數(shù)返回一個(gè)字符串指針,這個(gè)字符串就是顯卡所支持的所有擴(kuò)展的擴(kuò)展名,不同的擴(kuò)展名之間用空格隔開(kāi),形如:?
"GL_ARB_imaging GL_ARB_multitexture GL_ARB_point_parameters ……"????
????OpenGL擴(kuò)展往往都會(huì)新增一些函數(shù),在Windows平臺(tái)上,這些函數(shù)不是通過(guò).lib庫(kù)連接到程序里的,而要在運(yùn)行時(shí)動(dòng)態(tài)獲得函數(shù)的指針。我們以GL_ARB_point_parameters擴(kuò)展為例看看怎么獲得函數(shù)指針。??
首先要定義函數(shù)指針類(lèi)型,
typedef void (APIENTRY * PFNGLPOINTPARAMETERFARBPROC)(GLenum pname,
GLfloat param);
typedef void (APIENTRY * PFNGLPOINTPARAMETERFVARBPROC)(GLenum pname,
const GLfloat *params);
這個(gè)工作SGI已經(jīng)為我們做好,它提供了一個(gè)頭文件 glext.h ,里面有目前絕大多數(shù)擴(kuò)展的常量和函數(shù)指針定義,下載下來(lái)放到編譯器的include/GL文件夾下面,然后在程序里面加上:
??#include <GL/glext.h>
就可以在程序中使用常量和函數(shù)指針類(lèi)型了。??
然后要定義函數(shù)指針:
?? PFNGLPOINTPARAMETERFARBPROC glPointParameterfARB;
PFNGLPOINTPARAMETERFVARBPROC glPointParameterfvARB;??
再檢查顯卡是否支持GL_ARB_point_parameters擴(kuò)展,其中isExtensionSupported是自定義的一個(gè)函數(shù),就是在glGetString( GL_EXTENSIONS )返回的字符串里查找是否存在指定的擴(kuò)展名:
??int hasPointParams = isExtensionSupported("GL_ARB_point_parameters"); ?
如果支持,就可以用wglGetProcAddress函數(shù)獲取擴(kuò)展函數(shù)的指針:
if (hasPointParams)?
??{
glPointParameterfARB = (PFNGLPOINTPARAMETERFARBPROC)\
wglGetProcAddress( "glPointParameterfEXT" );
glPointParameterfvARB = (PFNGLPOINTPARAMETERFVARBPROC) \
wglGetProcAddress( "glPointParameterfvEXT" );
}
最后就可以在程序里使用擴(kuò)展函數(shù):
??if (hasPointParams)
??{
static GLfloat quadratic[3] = { 0.25, 0.0, 1/60.0 };
glPointParameterfvARB(GL_DISTANCE_ATTENUATION_ARB, quadratic);
glPointParameterfARB(GL_POINT_FADE_THRESHOLD_SIZE_ARB, 1.0);
}
 另外,下面代碼說(shuō)明如何訪問(wèn)擴(kuò)展函數(shù):(資料來(lái)源于csdn知識(shí)庫(kù))
調(diào)用wglGetProcAddress函數(shù)訪問(wèn)一個(gè)不在標(biāo)準(zhǔn)OpenGL庫(kù)中的擴(kuò)展函數(shù)。如果該擴(kuò)展函數(shù)存在當(dāng)前的執(zhí)行(implementation)中,那么wglGetProcAddress返回一個(gè)用來(lái)訪問(wèn)該函數(shù)的函數(shù)指針。否則,wglGetProcAddress返回NULL.
例如,要訪問(wèn)glAddSwapHintRectWIN擴(kuò)展函數(shù),如下調(diào)用wglGetProcAddress:?
// Get a pointer to the extension function.
typedef void (WINAPI *FNSWAPHINT)(GLint, GLint, GLsizei, GLsizei);
fnSwapHint = (FNSWAPHINT)wglGetProcAddress("glAddSwapHintRectWIN");?
// Actual call to glAddSwapHintRectWIN.
if (fnSwapHint != NULL)
(*fnSwapHint)(0, 0, 100, 100);?
2.3 WGL擴(kuò)展
???? glGetString( GL_EXTENSIONS )取得的擴(kuò)展字符串中并不包括針對(duì)Windows平臺(tái)的WGL擴(kuò)展,WGL擴(kuò)展串要通過(guò)WGL_ARB_extensions_string擴(kuò)展來(lái)獲得,以下代碼演示了如何獲得WGL擴(kuò)展串:???
定義WGL_ARB_extensions_string擴(kuò)展新增函數(shù)wglGetExtensionsStringARB的函數(shù)指針類(lèi)型,同樣這個(gè)工作SGI已經(jīng)為我們做好,只不過(guò)不在glext.h中,而在它提供的另外一個(gè)頭文件 wglext.h 中:
??typedef const char *(APIENTRY * PFNWGLGETEXTENSIONSSTRINGARBPROC)(
??????HDC hdc); 
定義函數(shù)指針:
??PFNWGLGETEXTENSIONSSTRINGARBPROC wglGetExtensionsStringARB; 
檢查是否支持WGL_ARB_extensions_string擴(kuò)展,如果不支持,表示這個(gè)顯卡不支持WGL擴(kuò)展,如果支持,則得到wglGetExtensionsStringARB函數(shù)的指針,并調(diào)用它得到WGL擴(kuò)展串:
??int hasWGLext = isExtensionSupported("WGL_ARB_extensions_string");
??if (hasWGLext)
??{
????wglGetExtensionsStringARB = (PFNWGLGETEXTENSIONSSTRINGARBPROC) \
wglGetProcAddress( "wglGetExtensionsStringARB" );
????const char *wglExt = wglGetExtensionsStringARB( hdc );
????……??}???

2.4 OpenGL版本
一些常用的OpenGL擴(kuò)展會(huì)在新版的OpenGL中加到OpenGL核心中去,成為OpenGL標(biāo)準(zhǔn)的一部分,可以簡(jiǎn)化程序開(kāi)發(fā),程序員使用這些功能時(shí)不必做繁瑣的擴(kuò)展初始化工作。比如多重紋理功能,在OpenGL1.2.1加入到OpenGL核心中,以前要使用多重紋理,要先檢查是否支持GL_ARB_multitexture擴(kuò)展,然后初始化glActiveTextureARB等函數(shù),很麻煩,而OpenGL1.2后,則可以直接使用glActiveTexture函數(shù)。
?? 不過(guò),這種簡(jiǎn)化只有Mac/Unix/Linux程序員才能享受到,在Windows平臺(tái)上沒(méi)有這么簡(jiǎn)單。微軟為了維護(hù)Direct3D,對(duì)OpenGL的支持很消極,其OpenGL實(shí)現(xiàn)仍然是1.1。由于Windows上的OpenGL程序最終都會(huì)動(dòng)態(tài)鏈接到微軟的OpenGL32.dll,可OpenGL32.dll只支持OpenGL 1.1,使我們不能直接使用新版OpenGL,仍然要用擴(kuò)展訪問(wèn)OpenGL1.1以來(lái)新增的功能。
2.5 OpenGL擴(kuò)展資料?
All About OpenGL Extensions:必讀。
討論OpenGL擴(kuò)展機(jī)制,講述了如何閱讀擴(kuò)展官方說(shuō)明書(shū),并舉了一些擴(kuò)展的例子。
??OpenGL Extension Registry:
????由SGI維護(hù),列出了目前公開(kāi)的所有擴(kuò)展及其官方說(shuō)明書(shū)。
??OpenGL Hardware Registry:??????由Delphi3D.net維護(hù),列出了目前幾乎所有3D加速卡的OpenGL硬件信息,包括其支持的擴(kuò)展。當(dāng)然,這里面列的擴(kuò)展不能作為程序的依據(jù),程序中要使用某個(gè)擴(kuò)展,還是要先檢查顯卡是否支持。因?yàn)橥瑯拥娘@卡,如果驅(qū)動(dòng)程序不同,支持的擴(kuò)展也不相同,往往新的驅(qū)動(dòng)程序會(huì)加入新的擴(kuò)展,丟掉一些廢棄的擴(kuò)展。??
2.6 OpenGL硬件加速
??在Windows平臺(tái)上,OpenGL驅(qū)動(dòng)可能有三種模式:純軟件、MCD和ICD:?
純軟件模式:微軟提供一個(gè)OpenGL的軟件實(shí)現(xiàn),所有渲染操作均由CPU完成,速度很慢。如果安裝系統(tǒng)時(shí)使用Windows自帶的顯卡驅(qū)動(dòng)程序,那么OpenGL程序就會(huì)運(yùn)行在軟件模式下。而且由于微軟有自己的Direct3D,所以對(duì)OpenGL的支持很消極,它的OpenGL純軟件實(shí)現(xiàn)只支持OpenGL1.1,而目前OpenGL的最新版本為1.4?
MCD(Mini Client Driver):MCD是早期微軟在Windows NT上支持OpenGL時(shí),為了簡(jiǎn)化驅(qū)動(dòng)開(kāi)發(fā)時(shí)使用的一個(gè)模型。在這個(gè)模型中,OpenGL渲染管線(xiàn)的變換、光照部分仍然由軟件實(shí)現(xiàn),而光柵化部分則由硬件廠商實(shí)現(xiàn),因此只要硬件支持,MCD可以硬件加速光柵化部分。MCD雖然可以簡(jiǎn)化驅(qū)動(dòng)開(kāi)發(fā),但是功能限制太大,現(xiàn)在市面上的3D加速卡均支持硬件變換和光照,MCD卻不能利用這一特性,看上去MCD已經(jīng)沒(méi)有存在的價(jià)值?
ICD(Installable Client Driver):ICD是一個(gè)完整的OpenGL驅(qū)動(dòng)模型,比MCD復(fù)雜得多。硬件廠商要實(shí)現(xiàn)完整的OpenGL渲染管線(xiàn),如變換、光照、光柵化等,因此只要硬件支持,ICD可以硬件加速整個(gè)OpenGL渲染管線(xiàn)。我們通常說(shuō)的OpenGL硬件加速就是指的通過(guò)ICD模型獲得的硬件加速,而現(xiàn)在硬件廠商提供的OpenGL驅(qū)動(dòng)程序也都是依照ICD模型開(kāi)發(fā)的。主要硬件廠商的ICD已經(jīng)可以支持OpenGL的最新版1.4??
????Windows怎么實(shí)現(xiàn)OpenGL硬件加速呢?OpenGL32.dll是微軟的OpenGL 1.1純軟件實(shí)現(xiàn),我們的程序都要?jiǎng)討B(tài)鏈接到這個(gè)dll。如果安裝3D芯片廠商的驅(qū)動(dòng)程序,會(huì)將一個(gè)不同名字的dll放到Windows系統(tǒng)目錄下,比如在Windows 2000下安裝nVIDIA GeForce2 MX的驅(qū)動(dòng)程序,會(huì)在系統(tǒng)目錄下放一個(gè)nvoglnt.dll(這就是nVIDIA的OpenGL驅(qū)動(dòng)),并在注冊(cè)表中登記nvoglnt.dll,讓W(xué)indows知道硬件加速OpenGL驅(qū)動(dòng)的名字,以后運(yùn)行OpenGL程序,OpenGL32.dll就會(huì)把OpenGL調(diào)用直接轉(zhuǎn)到nvoglnt.dll。??
?? Windows平臺(tái)上,一個(gè)OpenGL程序是否使用硬件加速由三個(gè)因素決定,這三個(gè)因素缺一不可,否則程序都會(huì)運(yùn)行于純軟件模式:
是否有一塊3D加速卡
是否安裝了顯卡廠商提供的最新的驅(qū)動(dòng)程序,Windows自帶的顯卡驅(qū)動(dòng)程序并不會(huì)提供OpenGL硬件加速能力
指定的像素格式是否被顯卡硬件所支持
??判斷一種像素格式是否被顯卡硬件所支持,可以用函數(shù)DescribePixelFormat取得該像素格式的數(shù)據(jù),然后看結(jié)構(gòu)體PIXELFORMATDESCRIPTOR中的dwFlags的值,如果
PFD_GENERIC_FORMAT被置1,并且PFD_GENERIC_ACCELERATED被置0,即
(pfd.dwFlags & PFD_GENERIC_FORMAT) &&?
!(pfd.dwFlags & PFD_GENERIC_ACCELERATED)
表明該像素格式不被顯卡硬件支持,使用該像素格式的OpenGL程序?qū)⑹褂眉冘浖J戒秩?br /> PFD_GENERIC_FORMAT被置1,并且PFD_GENERIC_ACCELERATED被置1,即
(pfd.dwFlags & PFD_GENERIC_FORMAT) &&?
(pfd.dwFlags & PFD_GENERIC_ACCELERATED)
表明該像素格式被顯卡硬件支持,并且程序使用MCD模式渲染
PFD_GENERIC_FORMAT被置0,并且PFD_GENERIC_ACCELERATED被置0,
!(pfd.dwFlags & PFD_GENERIC_FORMAT) &&?
!(pfd.dwFlags & PFD_GENERIC_ACCELERATED)
表明該像素格式被顯卡硬件支持,并且程序使用ICD模式渲染?
3 OpenGL Extension?
這個(gè)軟件可以自動(dòng)測(cè)試顯卡對(duì)OpenGL的版本支持和擴(kuò)展命令。?
相關(guān)參考文獻(xiàn):
《Opengl擴(kuò)展機(jī)制》 (用google能夠搜到,有代碼實(shí)現(xiàn))
Extensions to OpenGL (opengl網(wǎng)站對(duì)extension的簡(jiǎn)單介紹)

OpenGL 開(kāi)發(fā)環(huán)境配置??OpenGL 下有一些重用的輔助庫(kù),比如glut,glee,glew等等,在windows平臺(tái)下需要自己安裝,因?yàn)槲④洖榱送茝V自己的DX,在windows下只支持openGL 1.1版本。你可以打開(kāi)\Microsoft Visual Studio X.X\VC\include\gl\gl.h?
或 \Microsoft??SDKs\Windows\v6.1\Include\gl\gl.h 文件,查看微軟默認(rèn)支持的openGL版本號(hào)是:/* Version */
#define GL_VERSION_1_1????????????????????1 現(xiàn)在openGL已經(jīng)發(fā)展到3.0了,因此我們需要自己下載配置這些庫(kù),在這里我們來(lái)安裝glut, glee, glew這三個(gè)庫(kù),以及一些OpenGL擴(kuò)展支持。?
glut : 提供對(duì)窗口的封裝,這是跨平臺(tái)窗口的,我們就不必自己去編寫(xiě)煩瑣的窗口代碼。glee : 方便用來(lái)判斷當(dāng)前系統(tǒng)是不是支持某項(xiàng)OpenGL特性,我們就不用自己去寫(xiě)煩瑣的先取函數(shù)地址然后再判斷的代碼了。glew : 因?yàn)閣indows默認(rèn)只支持OpenGL 1.1,你要想用更高版本的OpenGL,你就需要安裝它,它能自動(dòng)識(shí)別你的平臺(tái)所支持的全部OpenGL高級(jí)擴(kuò)展函數(shù)。
1,安裝 glut?GLUT3.7下載地址:http://www.opengl.org/resources/libraries/glut/glutdlls37beta.zip
點(diǎn)擊上面的鏈接下載最新的GLUT,最新的GLUT版本是3.7,解壓,將 glut32.dll 和 glut.dll 拷貝到 c:\windows\system32 下面,將 glut32.lib 和 glut.lib 拷貝到 VC 安裝目錄下的 lib 目錄下(如:\Microsoft Visual Studio 9.0\VC\lib\下),將 glut.h 拷貝到VC安裝目錄下的 \include\gl\ 目錄下(如:\Microsoft Visual Studio 9.0\VC\include\gl\下)。在程序中我們只需要把?#include <GL/gl.h>
#include <GL/glu.h>?用?
#include <GL/glut.h>?替換就可以了。因?yàn)樵陬^文件 glut.h 中已經(jīng)包含這些頭文件,并導(dǎo)入了必要的庫(kù):?
#pragma comment (lib, "winmm.lib")???? /* link with Windows MultiMedia lib */#pragma comment (lib, "opengl32.lib")??/* link with Microsoft OpenGL lib */
#pragma comment (lib, "glu32.lib")???? /* link with OpenGL Utility lib */#pragma comment (lib, "glut32.lib")????/* link with Win32 GLUT lib */?
2,安裝 glew下載鏈接:
https://sourceforge.net/project/downloading.php?group_id=67586&filename=glew-1.5.1-win32.zip?點(diǎn)擊上面的鏈接下載最新的GLEW(支持OpenGL 3.0),解壓,將 \bin\glew32.dll 拷貝到 c:\windows\system32 下面,將 \lib\glew32.lib 拷貝到VC安裝目錄下的 lib 目錄下(如:\Microsoft Visual Studio 9.0\VC\lib\下),將 \include\glew.h 和 \include\wglew.h 拷貝到 VC 安裝目錄下的 \include\gl\ 目錄下(如:\Microsoft Visual Studio 9.0\VC\include\gl\下)。在程序中我們只需要在包含gl,glu 或 glut.h 之前包含 glew.h就可以了(注意:一定要先包含 glew.h),在在代碼中加上這么一句:?
#pragma comment (lib, "glew32.lib")??示例:?
#include <GL/glew.h>#include <GL/glut.h>?
#progrma comment(lib, "glew32.lib")?在創(chuàng)建OpenGL渲染context之后,調(diào)用 glewInit(); 初始化glew就可以了。?
3,安裝 glee?GLee 主頁(yè):http://elf-stone.com/glee.php
下載鏈接:http://elf-stone.com/getfile.php?title=GLee?點(diǎn)擊上面的鏈接下載最新的GLee,解壓,將 GLee.lib 拷貝到 VC 安裝目錄下的 lib 目錄下(如:\Microsoft Visual Studio 9.0\VC\lib\下),將 GLee.h 拷貝到VC安裝目錄下的 \include\gl\ 目錄下(如:\Microsoft Visual Studio 9.0\VC\include\gl\下)。在應(yīng)用程序中,我們就可以像如下來(lái)使用:?
#include <GL/GLee.h>#progrma comment(lib, "GLee.lib")?
if( GLEE_ARB_multitexture ) // is multitexture support available?{
??????glMultiTexCoord2fARB(...);????// safe to use multitexture}
else?{
??????// fallback}?
4,安裝一些擴(kuò)展支持下載這三個(gè)文件?glext.h,?glxext.h, 和?wglext.h?,放置到 VC 安裝目錄下的 \include\gl\ 目錄下(如:\Microsoft Visual Studio 9.0\VC\include\gl\下)。使用的時(shí)候直接包含它們就可以了。

總結(jié)

以上是生活随笔為你收集整理的OpenGL版本与OpenGL扩展机制的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。