OpenGL使用簡介 - 中國科學(xué)技術(shù)大學(xué)_第1頁
OpenGL使用簡介 - 中國科學(xué)技術(shù)大學(xué)_第2頁
OpenGL使用簡介 - 中國科學(xué)技術(shù)大學(xué)_第3頁
OpenGL使用簡介 - 中國科學(xué)技術(shù)大學(xué)_第4頁
OpenGL使用簡介 - 中國科學(xué)技術(shù)大學(xué)_第5頁
已閱讀5頁,還剩16頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

OpenGL使用簡介簡介OpenGL(OpenGraphicsLibrary)是個定義了一個跨編程語言、跨平臺的編程接口的規(guī)格,是個專業(yè)的3D程序接口,是一個功能強(qiáng)大,調(diào)用方便的底層3D圖形庫。OpenGL是個與硬件無關(guān)的軟件接口,可以在不同的平臺如Windows95、WindowsNT、Unix、Linux、MacOS、OS/2之間進(jìn)行移植。這個接口由近二百五十個不同的函數(shù)調(diào)用組成,用來從簡單的圖元繪制復(fù)雜的三維景象。在電子游戲工業(yè)里,它是頗普遍的,而另一種編程接口系統(tǒng)是僅用于MicrosoftWindows上的Direct3D。OpenGL常用于CAD、虛擬實(shí)境、科學(xué)視覺化程序和電子游戲開發(fā)。發(fā)展歷史OpenGL的前身是SGI公司為其圖形工作站開發(fā)的IRISGL。1992年7月,SGI公司發(fā)布了OpenGL的1.0版本。OpenGL歷經(jīng)2.0,1.5,1.4,1.3,1.2,1.1,or1.0多個版本?,F(xiàn)在最新的是在2006年8月3日公布的OpenGLversion2.1。

OpenGL規(guī)范由1992年成立的OpenGL架構(gòu)評審委員會(ARB)維護(hù)。ARB由一些特別興趣于建立一個統(tǒng)一的普遍可用的API的公司組成。根據(jù)OpenGL官方網(wǎng)站,2002年6月的ARB投票成員包括3Dlabs、AppleComputer、ATITechnologies、DellComputer、Evans&Sutherland、Hewlett-Packard、IBM、Intel、Matrox

、NVIDIA、SGI和SunMicrosystems(Microsoft曾是創(chuàng)立成員之一,但已于2003年3月退出)。GL的平臺(1)基于OpenGL標(biāo)準(zhǔn)開發(fā)的應(yīng)用程序必須運(yùn)行于32位Windows

平臺下,如WindowsNT或Windows95環(huán)境;而且運(yùn)行時還需有動態(tài)

鏈接庫OpenGL32.DLL、Glu32.DLL,一般在…\WINDOWS\system32里面(注:window2000以上系統(tǒng)均帶有OPENGL32.DLL和glu32.dll)一般來說,VC6和VS.NET里面就帶有GL的基本庫VC6:…\MicrosoftVisualStudio\VC98\Include\GLVS.NET.2005:…\MicrosoftVisualStudio8\VC\PlatformSDK\Include\gl一般是Gl.h,Glaux.h,Glu.hLib里也有:OpenGL32.lib,GLu32.lib,GLaux.lib所以開發(fā)者在VC下可以使用#include<gl\gl.h> //HeaderFileForTheOpenGL32Library#include<gl\glu.h> //HeaderFileForTheGLu32Library#include<gl\glaux.h>//HeaderFileForTheGlauxLibraryGL的平臺(2)同時OpenGL也適應(yīng)別的OS和語言在OpenGL的基礎(chǔ)上還有OpenInventor、Cosmo3D、Optimizer等多種高級圖形庫,適應(yīng)不同應(yīng)用??筛鷵?jù)需要下載相關(guān)的開發(fā)包。

OpenGL基本功能

模型繪制模型觀察顏色模式的指定光照應(yīng)用圖象效果增強(qiáng)位圖和圖象處理紋理映射實(shí)時動畫交互技術(shù)

一些命名規(guī)則函數(shù):OpenGL核心庫(gl)OpenGL實(shí)用庫(glu)對X窗口系統(tǒng)的OpenGL擴(kuò)展(glX)舉例:voidglBegin(GLenummode);voidgluBeginCurve(GLUnurbs*nurb);voidglXFreeContextEXT(Display*dpy,GLXContext

ctx);參數(shù):GL_POINTS,GL_LINES,GL_LINE_STRIP,GL_LINE_LOOP,GL_TRIANGLES,GL_TRIANGLE_STRIP,GL_TRIAN,GL_QUADS,GL_QUAD_STRIP數(shù)據(jù)類型名voidglVertex3s(GLshortx,GLshort y,GLshortz);voidglVertex3i(GLintx,GLinty,GLintz);voidglVertex3f(GLfloat x,GLfloaty,GLfloatz);voidglVertex3d(GLdoublex,GLdoubley,GLdoublez);設(shè)置VisualC/C++6.0VisualC/C++的工程有兩個重要選項(xiàng):Console(控制臺)和Win32應(yīng)用程序?qū)袃蓚€窗口:一個控制臺窗口,以及一個OpenGL窗口。選擇Win32仍然可以讓你在不需要關(guān)心Windows程序設(shè)計(jì)的情況下編寫GLUT程序.你需要做以下設(shè)置:

選擇Project->settings

選擇Link選項(xiàng)卡

從Category中選擇Output

在Entry-pointsynmbol

文本框中鍵入mainCRTStartup對于已存在的控制臺工程,有一個簡單的辦法將它轉(zhuǎn)換成Win32應(yīng)用程序:

根據(jù)上面的步驟修改入口點(diǎn),在Projectoptions文本框中用subsystem:windows

覆蓋subsystem:console

或者你可以直接在你的源代碼開頭處添加:

代碼

//#pragmacomment(linker,"/subsystem:\"windows\"/entry:\"mainCRTStartup\"")

在沒使用GLUT的情況下(手動添加link):在你文件頭加上#include<gl\gl.h>#include<gl\glu.h>#include<gl\glaux.h>進(jìn)入Project菜單,選Settings項(xiàng),彈出Settings對話框,選Link項(xiàng),在Libraries欄目中加入OpenGL庫:opengl32.libglu32.libglaux.libGLUTGLUT(OpenGLUtilityToolkit)安裝:在windows下通過C/C++語言編寫GLUT程序,你需要以下三個文件:

GLUT.H-你需要在你的源代碼中包含這個文件。通常情況下,這個文件應(yīng)該放在你系統(tǒng)的包含目錄下的GL文件夾中。

GLUT.LIB(SGIwindows版本)以及glut32.lib(微軟版本)-這個文件必須被連接到你的程序中,確保它放在LIB目錄中。glut32.dll(Windows)和glut.dll(SGIWindows版本)-根據(jù)你所使用的OpenGL選擇一個,如果你正在使用微軟公司的版本,那么你必須選擇glut32.dll。你應(yīng)該把DLL放置在你的系統(tǒng)文件夾中。舉例:在windowXP下使用VC6安裝GLUT下載glutdlls并解壓復(fù)制glut32.dll和glut.dll到…\windows\system32復(fù)制glut.h到...\MicrosoftVisualStudio\VC98\Include\GL復(fù)制glut32.lib和glut.lib到…\MicrosoftVisualStudio\VC98\Lib#include<GL/glut.h>voidrenderScene(void){//繪制一個簡單的二維的三角形

glClear(GL_COLOR_BUFFER_BIT);

glBegin(GL_TRIANGLES); glVertex3f(-0.5,-0.5,0.0); glVertex3f(0.5,0.0,0.0); glVertex3f(0.0,0.5,0.0);

glEnd();

glFlush();}voidmain(int

argc,char**argv){

glutInit(&argc,argv);//初始化glut

glutInitDisplayMode(GLUT_DEPTH|GLUT_SINGLE|GLUT_RGBA); //設(shè)置窗口的模式-深度緩存,單緩存,顏色模型

glutInitWindowPosition(100,100);//設(shè)置窗口的位置

glutInitWindowSize(320,320);//設(shè)置窗口的大小

glutCreateWindow(“3DTech-GLUTTutorial”);//創(chuàng)建窗口并賦予title

glutDisplayFunc(renderScene);//調(diào)用renderScene把繪制傳送到窗口

glutMainLoop();//進(jìn)入循環(huán)等待}通過定義voidglutReshapeFunc(void(*func)(intwidth,intheight))來避免因窗口大小改變時圖形的變形;通過定義voidglutIdleFunc(void(*func)(void));

使應(yīng)用空閑時反復(fù)調(diào)用函數(shù)func對于window的基本應(yīng)用:mouse,keyboard,menu,subwindow,font等glut里也提供了支持#include<GL/glut.h>floatangle=0.0;voidchangeSize(intw,inth){

if(h==0)h=1; floatratio=1.0*w/h;

glMatrixMode(GL_PROJECTION);

glLoadIdentity(); glViewport(0,0,w,h); gluPerspective(45,ratio,1,1000);

glMatrixMode(GL_MODELVIEW);

glLoadIdentity(); gluLookAt(0.0,0.0,5.0, 0.0,0.0,-1.0, 0.0f,1.0f,0.0f);}voidrenderScene(void){

glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);

glPushMatrix(); glRotatef(angle,0.0,1.0,0.0);

glBegin(GL_TRIANGLES); glVertex3f(-0.5,-0.5,0.0); glVertex3f(0.5,0.0,0.0); glVertex3f(0.0,0.5,0.0);

glEnd();

glPopMatrix(); angle++;

glutSwapBuffers();}voidmain(int

argc,char**argv){

glutInit(&argc,argv);

glutInitDisplayMode(GLUT_DEPTH| GLUT_DOUBLE|GLUT_RGBA);//設(shè)為雙緩沖區(qū), //平滑動畫需要

glutInitWindowPosition(100,100); glutInitWindowSize(320,320);

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論