高級(jí)計(jì)算機(jī)圖形學(xué)_第1頁
高級(jí)計(jì)算機(jī)圖形學(xué)_第2頁
高級(jí)計(jì)算機(jī)圖形學(xué)_第3頁
高級(jí)計(jì)算機(jī)圖形學(xué)_第4頁
高級(jí)計(jì)算機(jī)圖形學(xué)_第5頁
已閱讀5頁,還剩91頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

高級(jí)計(jì)算機(jī)圖形學(xué)

講授:董蘭芳

研究方向:科學(xué)計(jì)算可視化

圖形、圖像處理

模式識(shí)別

Telephone/p>

Email:Ifdong@ustc.

Homepage:

http://staff.ustc.edu,dong

中國科學(xué)技術(shù)大學(xué)

視覺計(jì)算與可視化實(shí)驗(yàn)室

第二章圖形學(xué)編程

?2.1OpenGL簡介

?2.2Siepinski鏤墊

?2.3編寫二維圖形應(yīng)用程序

?2.4OpenGLAPI

?2.5圖元和屬性

?2.6顏色

?2.7觀察

?2.8控制函數(shù)

?2.9Siepinski鏤墊繪制程序

?2.10多邊形和遞歸

?2.11三維Siepinski鏤墊

?2.12繪制隱函數(shù)曲線

?2.13基于三角網(wǎng)格的等值線繪制

2.1OpenGL簡介

?三種類型的計(jì)算機(jī)圖形軟件系統(tǒng):

>用某種語言寫成的子程序包

/GKS

/PHIGS

/GL

/OpenGL

/DirectX

便于移植和推廣、但執(zhí)行速度相對(duì)較慢,效率低!

>擴(kuò)充計(jì)算機(jī)語言,使其具有圖形生成和處理的功能

如:TurboPascal>TurboC,AutoLisp等。

簡練、緊湊、執(zhí)行速度快,但不可移植!

A專用圖形系統(tǒng):效率高,但系統(tǒng)開發(fā)量大,可移植

2.1OpenGL簡介

>專用圖形系統(tǒng):效率高,但系統(tǒng)開發(fā)量大,可移植性差。

工具欄

快捷菜單欄

主菜單欄

|業(yè)1)?,歹a7.0.1:.\imtitled廠〕值I區(qū)〕|

FileIEdilModifyCr?ot?Di?pl*yVtndowAn>?*taDefor*Sk?l?tonSkinC?n*tr*inCh*r*cl?rX?lp

Hibon二||因一*卜|m*6I*+《N?闿X??砧涌它0.,。|日“笈|西面渭|$5、春濾妾

General|Curve;Si<fac?3|Polygon:Subdrv*|Delormabon|Arwnation|DynamicsIRendering|P?nt£Meets!Toon|Cloth:FluidsIF=|Ha?|Custom:VueGxStreamPlugvi|曰

V?*wSh*4(ncShowPan?laVieSXadin?L><htingShowP*n*l*事事能

Chgnel*Obj?vl

(■?Dupka1Rendet

L?y?rsOption?Hvlp

工作區(qū)

2.1OpenGL簡介

?OpenGL(OpenGraphicsLibrary)是個(gè)定義了一個(gè)跨編

程語言、跨平臺(tái)的編程接口的規(guī)格,是個(gè)專業(yè)的3D程序

接口,是一個(gè)功能強(qiáng)大,調(diào)用方便的底層3D圖形庫。

?OpenGL是個(gè)與硬件無關(guān)的軟件接口,可以在不同的平臺(tái)

如Windows95、WindowsNT、Unix>Linux、MacOS

、OS/2之間進(jìn)行移植。

?這個(gè)接口由近二百五十個(gè)不同的函數(shù)調(diào)用組成,用來從簡

單的圖元繪制復(fù)雜的三維景象。在電子游戲工業(yè)里,它是

頗普遍的,而另一種編程接口系統(tǒng)是僅用于Micros。什

Windows上的Directsb。

?OpenGL常用于CAD、虛擬實(shí)境、科學(xué)視覺化程序和電子

游戲開發(fā)。

2.1OpenGL簡介

?OpenGL的前身是SG工公司為其圖形工作站開發(fā)的工R工SGL。

1992年7月,SG工公司發(fā)布了OpenGL的1.0版本。

?OpenGL歷經(jīng)2.0,1.5,1.4,1.3,1.2,1.1,or1.0多個(gè)

版本。現(xiàn)在最新的是在2006年8月3日公布的OpenGLversion

2.1o

?OpenGL規(guī)范由1992年成立的OpenGL架構(gòu)評(píng)審委員會(huì)(ARB

)維護(hù)。ARB由一些特別興趣于建立一個(gè)統(tǒng)一的普遍可用的

AP工的、公司組成。根據(jù)OpenGL官方網(wǎng)站,2002年6月的ARB

投票成員包括3Dlabs、AppleComputer、ATITechnologies

、bellComputer、Evans&Sutherland、Hewlett-Packard

、IBM>IntekMatrox、NVIDIA>SG工和Sun

Microsystems(Microsoft曾是創(chuàng)立成員之一,但已于2003

年3月退出)。贅忌

2.1OpenGL簡介

?GL(1981-2006):SiliconGraphics(SGI)

GeometryEngine(幾何引擎),硬件(VLSI)

實(shí)現(xiàn)幾何流水線,極大改良了圖形工作站。

>立即模式繪制

>可非常簡單地設(shè)計(jì)出三維交互圖形

應(yīng)用程序。

2.1OpenGL簡介

?OpenGL(1992):SG工領(lǐng)導(dǎo)的OpenGLArchitectural

ReviewBoard(OpenGLARB)發(fā)布1.0版平臺(tái)無關(guān)的API:

?易于使用

?與硬件非常貼近,從而可以充分發(fā)揮其性能

>著重在于渲染(rendering)

?沒有提供窗口和輸入接口,從而避免依賴于

具體的窗口系統(tǒng)

2.1OpenGL簡介

?核心庫(GL):基本庫。

?實(shí)用函數(shù)庫(GLU):處理專門操作的附加庫。

(復(fù)雜對(duì)象描述、曲線和曲面的繪制……)

?實(shí)用函數(shù)工具包(GLUT):實(shí)用函數(shù)工具包。

(提供與任意屏幕窗口系統(tǒng)進(jìn)行交互的函數(shù)庫)

2.1OpenGL簡介

?基于QpenGL標(biāo)準(zhǔn)開發(fā)的應(yīng)用程序必須運(yùn)行于32位Windows

平臺(tái)可如WindowsNT或Windows§6環(huán)境;而且運(yùn)行時(shí)逐需有動(dòng)態(tài)

鏈接庫OpenGL32.DLL、Glu32.DLL,一般在...\W:[NDOW5\system32

里面(注:window2000以上系統(tǒng)均帶有OPENGL32.DLL和glu32.dll)

?一般來說,VC6和VS.NET里面就帶有GL的基本庫

>VC6:..AMicrosoftVisualStudio\VC98\Include\GL

>VS.NET.2005:..AMicrosoftVisualStudio

8\VC\PlatformSDK\Inclucle\gl

>一般是Gl股,Slaux.h,Glu.h

>Lib里也有:Open@L32.lib,GLu32』ib,GLaux.lib

?所以開發(fā)者在VC下可以使用

>#include<gl\gl.h>//HeaderFileForTheOpenGL32Library

>#include<gl\glu.h>//HeaderFileForTheGLu32Library

>#include<gl\glaux.h>//HeaderFileForTheGlauxLibrary

2.1OpenGL簡介

LibS0BI

文件。僦⑥查看9收藏他)工具9幫助也);:

D后退,十搜索文件夾叵]▼

地址@)ODAProgramFilesXBicrosoftVisualStudio\VC98\Lib*,|心轉(zhuǎn)到

名稱4大小類型停改日期人

文件和文件夾任務(wù)V[-給EDKGUID.UB4KBObjectFileLib.1998-5-130:00

EDKMAPI.LIB63KBObjectFileLib.1998-5-130:00

其它位置可繪EDKMSG.LIB2KBObjectFileLib.1998-5-130:00

組EDKSETUP.UB93KBObjectFileLib.1998-5-130:00

口VC98^EDKTRACK.UB5KBObjectFiltLib.1998-5-130:00

Q我的文檔"EDKUTHS.UB60KBObjectFileLib.1998-5-130:00

口共享文檔“EXADMINLIB48KBObjectFiltLib.1998-5-130:00

《我的電腦EXCKIHST.UB93KBObjectFileLib.1998-5-130:00

EXCHSDK.UB1,423KBObjtctFil?Lib.1998-5-130:00

母網(wǎng)上郃居

綜FASTFILE.UB6KBObjectFileLib.1998-5-130:00

^FDI.LIB83KBObjectFileLib.1998-5-130:00

詳細(xì)信息多■/^FILTER.LIB10KBObjectFileLib.1998-5-130:00

境FBISTR32.UB4KBObjectFileLib.1998-5-130:00

21FP10.0BJ1KBObjectFile1998-6-170:00

GLU32.LIB

ObjectFileLibrary"FRIENDLY.UB7KBObjectFileLib.1998-5-130:00

修改日期1998年5月13日,“GM32.UB80KBObjectFil*Lib.1998-5-130:00

0:00^OAUX.LIB1,282KBObjectFileLib.1998-5-130:00

大?。?23KB券Clow321ib452KBObj?ctFil*Lib.2010-7-1312:22

“glew32s.lib1,140KBObjectFileLib.2010-7-1312:22

繪ES困回I13KBObjectFiltLib.1998-5-130:00

^Jglut32.1ib80KBObjectFileLib.2004-10-2311:25

線GTRTST32.UB23KBObjectFil*Lib.1998-6-220:00

空GUIDS.IJB98KBObjectFileLib.1998-5-130:00

為GIMAINUB27KBObjectFileLib.1998-5-130:00

^GfPERF.UB4KBObjectPileLib.1998-5-130:00

%GTREPOKr.UB11KBObjectFileLib.1998-5-130:00

幼HEXEDITUB4KBObj?ctFiltLib.1998-5-130:00

為HUNK.UB18KBObjectFileLib..1998-5-130:00

^ICMUI.LIB4KBObjectFiltLib.1998-5-130:00

給IKVUHK.UB323KBObjectFileLib.1998-5-130:00

^liAGEHLP.UB28KBObjectFiltLib.1998-5-130:00

“I1W32.1IB20KBObjectFileLib.1998-5-130:00

^JAVADBG.LIB12KBObjectFileLib.1998-5-130:00

-JKERNEL32.UB172KBObjectFileLib.1998-5-130:00

“KSGUID.UB142KBObjectFileLib.1998-5-130:00

綜LARGEIMT.LIB4KBObjectFil*Lib.1998-5-130:00

^LEBC.LEB864KBObjectFileLib.2004-2-170:00

,^LIBCD.LIB2,544KBObjtctFiltLib.2004-2-170:00

用IJBCD.PDB84KBPrograaDebugD.2004-2-170:00

^LIBCIUB162KBObjtctFil*Lib.1998-8-170:00

^UBCID.IJB389KBObjectFileLib.1998-6-170:00

也LIBCIDPDB76KBProgrsDebugD.1998-6-170:00

^LIBCIMT.UB178KBObjectFileLib...2004-2-170:0040K/s,OK/S0v

夕出“342.ppi0p*nO._Brief_Int...*PFT[■Libt=z/'<7^C>10:38

2.1OpenGL簡介

?函數(shù):

AOpenGL核心庫(gl)

AOpenGL實(shí)用庫(glu)

A對(duì)X窗口系統(tǒng)的OpenGL擴(kuò)展(glX)

?舉例:

>voidglBegin(GLenummode);

>voidgluBeginCurve(GLUnurbs*nurb);

>voidglXFreeContextEXT(bisplay*dpy,

GLXContextctx);

?參數(shù):

GL_PO工NTS,GL_LCNES,GL_LINE_5TR工P,GL_LCNE

_LdOP,GL-TRIANGLES,GL_TRIANGLE_STMP.fl

〒曰!:AN,GL_QUAbStGLj^UAb_STRIP匚/

2.1OpenGL簡介

表3-1

字符c語言類型OpenGL類型定義

bsignedcharGLbyte

sshortGLshorl

iintGLint

ffloatGLlloat,GLclampf

ddoubleGLdouble,GLclampd

ubunsignedcharGLubyte,GLboolean

usunsighedshortGLshorl

uiunsignedintGLuint.GLenuni,GLbitfield

voidGLvoid

?voidglVertex3s(&Lshortx,GLshorty,SLshortz);

?voidglVertex3i(&Lintx,SLinty,GLintz);

?voidglVertex3f(&Lfloatx,SLfloaty,GLfloatz);

?voidglVertex3d(GLdoublex,GLdoubley,GLdoublez);

2.1OpenGL簡介

【第英”?,大陋偏

洲開始||]⑥011LJDebug|[舊MkrosoFtPowerPC..四AcrobatReader-L.J而未命名-畫圖|18MicrosoftVisualC++14:50

2.1OpenGL簡介

Jl

onf\Build/Debug\FindinFiles1~\FindinFiles2~\Results]?||

次英④?,大翹城二|

妻開始爹

113!eJ,91MicrosoftPowerPo...|小AcrobatReaderT,..|$]未命名-畫圖11-MKrosoftVlsu...

2.1OpenGL簡介

.

-I11.exe-0error(s),0vjarning(s)

J

EEKBuildXDebugX_FindinFilesI~\~FindinFiles2"\Results]<||

J秀英,:大理常威廠>r

LnLCol1|REC|COL|OVR|READ

洲開始I痣聞J|S]Microsofl:PoM..|RjAcrobatReade…|W1未命名-畫圖811-Microsoft…|BB"E:\ll\Debugl..IlgBAnExample。...康89窗14:54

2.1OpenGL簡介

?在沒使用GLUT的情況下(手動(dòng)添加link):

>在你文件頭加上

/#include<gl\gl.h>

/#include<gl\glu.h>

/#include<gl\glaux.h>

>進(jìn)入Project菜單,選Settings項(xiàng),彈出Settings

對(duì)話框,選Link項(xiàng),在Libraries欄目中加入

OpenGL庫:opengl32.libglu32.libglaux.lib

2.1OpenGL簡介

?GLUT(OpenGLUtilityToolkit)

?安裝:在windows下通過C/C++語言編寫GLUT程序,你需要以下三個(gè)文件

>&LUT.H-你需要在你的源代碼中包含這個(gè)文件。通常情況下,這個(gè)文

件應(yīng)該放在你系統(tǒng)的包含目錄下的&L文件夾中。

>&LUT.LIB(SGIwindows版本)以及glu+32.lib(微軟版本)-這個(gè)文

件必須被連接到你的程序中,確保它放在LIB目錄中。

>glut32.dll(Windows)和glut.dll(SGIWindows版本)-根據(jù)你所使

用的OpenGL選擇一個(gè),如果你正在使用微軟公司的版本,那么你必須選

擇glut32.dllo你應(yīng)該把DLL放置在你的系統(tǒng)文件夾中。

?舉例:在windowXP下使用VC6安裝GLUT

>下載glutdlls并解壓

>復(fù)制glut32.dll和glut.dll至!!...\windows\system32

>復(fù)制gluT.h到...\MicrosofTVisualStudio\VC98\IncIude

>復(fù)制glut32.lib和glut.lib至(..\MicrosoftVisualStudio\VCSt§\

2.1OpenGL簡介

#include<GL/glut.h>

voidrenderScene(void){〃繪制一個(gè)簡單的二維的三角形

glClear(GL_COLOR_BUFFER_BIT);

glBegin(GL_TRIANGLES);

gIVertex3f(-0.5,-0.5,0.0);

gIVertex3f(0.5,0.0,0.0);

glVertex3f(0.0,0.5,0.0);

glEnd();

glFlush();

)

voidmain(intargc,char**argv){

glutlnit(&argc,argv);〃初始化glut

glutInitDisplayMode(GLUT_DEPTHIGLUT_SINGLEIGLUT_RGBA);

〃設(shè)置窗口的模式-深度緩存,單緩存,顏色模型

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

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

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

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

ghitMainLoopO;循環(huán)等布

2.1OpenGL簡介

我的電腦超星數(shù)字圖

書館

;3DTech-GLUTTutorial-1□!x|

網(wǎng)上鄰居

回收站

Internet卡

Explorer聯(lián)

flashfxp

UltraEdit

2.1OpenGL簡介

?OpenGL中

>核心(基本)庫的函數(shù)名以gl為前綴

glBegin,glClear,glCopyPixels,

gIPolygonMode

>常量以GL開頭

GL_2b,GL_RGB,GL_CCW,GL_POU/GON,

GL_AMBIENT_ANb_bIFFUSE

>庫中定義的專門的數(shù)據(jù)類型以GL開頭.

GLbyte,GLshort,Glint,GLfloot,GLdouble,

GLboolean

2.1OpenGL簡介

?使用OpenGL的核心庫

#include<windows.h>

#include<GL/gl.h>

#include<GL/glu.h>

?使用窗口管理

#include<GL/glut.h>

?C++程序所需的頭文件

#include<stdio.h>

#include<stdlib.h>

#include<math.h>

2.1OpenGL簡介

#include<GL/glut.h>

voidmydisplay(X

glClear(GL_COLOR_BUFFER_BIT);

glBegin(GL_POLYGON);

gIVertex2f(-0.5,-0.5);

glVertex2f(-0.5,0.5);

gIVertex2f(0.5,0.5);

glVertex2f(0.5,-0.5);

glEnd();

glFlush();

)

intmain(intargc,char**argvX

glutCreateWindow("simple");

glutDisplayFunc(mydisplay);

glutMainLoopO;

)

2.1OpenGL簡介

ionname

dimensions

glVertex3f(x,v,z)

x,y,zarefloats

belonDsstoGLJlibraiy

glVertex3fv(p)

pisapointertoanarray

2.1OpenGL簡介

?OpenGL的狀態(tài)

?OpenGL是一個(gè)狀態(tài)機(jī)(statemachine)狀態(tài):

持續(xù)性參數(shù),顏色、線型、材質(zhì)屬性等

AOpenGL函數(shù)有兩種類型生成圖元(圖元函數(shù),如

gIVertex)如果圖元可見,則被輸出

?頂點(diǎn)如何被處理,圖元的外觀由狀態(tài)控制

>改變狀態(tài)變換函數(shù)

A屬性函數(shù)

2.1OpenGL簡介

?事件循環(huán):在程序中定義

一個(gè)顯示回調(diào)函數(shù),(display

callback),每個(gè)GLUT程序都

必須有一個(gè)顯示回調(diào)函數(shù)。

只要OpenGL確定顯示內(nèi)容要被

刷新時(shí),顯示回調(diào)函數(shù)就會(huì)被

調(diào)用。

?main函數(shù)是以程序進(jìn)入事件

循環(huán)做為結(jié)束

2.1OpenGL簡介

?web:

>OpenGL官方主頁:http://www.opengl.org

>OpenGL2.1Reference:

http:Uwww./sdk/docs/mac

>GLUT:http:Uwww.opengl.org/resources/libraries/glut/

>NEUE的在線GL教程:http://

?specification:

>TheOpenGLUtilityToolkit(GLUT)Programming

Interface(PDF)

>OpenGL2.1specification(PDF)

?book:

AOpenGL超級(jí)寶典(三版)(中文),人民郵電出版社

AOpenGL編程指南(四版)(中文),人民郵電出版社

>OpenGLShadingLanguage

第二章圖形學(xué)編程

?2.1OpenGL簡介

?2.2Siepinski鏤墊

?2.3編寫二維圖形應(yīng)用程序

?2.4OpenGLAPI

?2.5圖元和屬性

?2.6顏色

?2.7觀察

?2.8控制函數(shù)

?2.9Siepinski鏤墊繪制程序

?2.10多邊形和遞歸

?2.11三維Siepinski鏤墊

?2.12繪制隱函數(shù)曲線

?2.13基于三角網(wǎng)格的等值線繪制

22Siepinski鏤墊

?生成過程:定義一個(gè)三角形,三個(gè)頂點(diǎn)分

別為:(Xi,y「O),(x2/y2/O),

(、343,°)

A1.在三角型內(nèi)隨機(jī)選擇一個(gè)初始點(diǎn)

(x,y,z)

A2.隨機(jī)選擇三個(gè)頂點(diǎn)之一。

A3.找出(x,y,z)和隨機(jī)選擇

的頂點(diǎn)這二者連線的中點(diǎn)。

A4.顯示此點(diǎn)。

A5.用這個(gè)點(diǎn)代替(x,y,z)o

A6.轉(zhuǎn)到步驟2。

第二章圖形學(xué)編程

?2.1OpenGL簡介

?2.2Siepinski鏤墊

?2.3編寫二維圖形應(yīng)用程序

?2.4OpenGLAPI

?2.5圖元和屬性

?2.6顏色

?2.7觀察

?2.8控制函數(shù)

?2.9Siepinski鏤墊繪制程序

?2.10多邊形和遞歸

?2.11三維Siepinski鏤墊

?2.12繪制隱函數(shù)曲線

?2.13基于三角網(wǎng)格的等值線繪制

⑥2.3編寫二維圖形應(yīng)用程序

/*Two-bimensionalSierpinskiGasket*/

/*GeneratedUsingRandomlySelectedVertices*/

/*AndBisection*/

#ifdef_APPLE_

#include<GLUT/glut.h>

#else

#include<GL/glut.h>

#endif

voidmyinit()

(

/*attributes*/

glClearColor(1.01.0,1.0,1.0);/*whitebackground*/

glColor3f(1.6,0.,0,0.0);/*drawinred*/

/*setupviewing*/

/*500x500windowwithoriginlowerleft*/

glMatrixMode(GL_PROJECTION);

glLoadldentityO;

glu0rtho2b(0.0,50.0,0.0,50.0);

glMatrixMode(GL_MObELVIEW);

)

.3編寫二維圖形應(yīng)用程序

void)

{GLfloatvertices[3][2]={{0.0,0.0},{25.0,50.0},{50.0,0.0}};/*任iangle*/

intj,k;

intrand();/*standardrandomnumbergenerator*/

GLfloatp[2]={7.5,5.0);/*Anarbitraryinitialpointinsidetraingle*/

glClear(GL_COLOR_BUFFER_BIT);/*clearthewindow*/

/*computeandplots5000newpoints*/

for(k=0;k<5000;k++)

{

j=rand()%3;/*pickavertexatrandom*/

/*Computepointhalfwaybetweenselectedvertexandoldpoint*/

p[0]=(p[0]+vertices[j][0])/2.0;

p[l]=(p[l]+vertices[j][l])/2.0;

/*plotnewpoint*/

glVertex2fv(p);

)

glEnd();

glFlush();/*clearbuffers*/

)

.2.3編寫二維圖形應(yīng)用程序

voidmain(intargc,char**argv)

(

/*StandardGLUTinitialization*/

glut工nit(&argc,argv);

glutlnitbisplayMode(GLUT_SINGLE|GLUT_RGB);

/*default,notneeded*/

glut工nitWindowSize(500,500);/*500x500pixelwindow*/

glut工nitWindowPosition(0,0);/*placewindowtopleftondisplay*/

glutCreateWindow("SierpinskiGasket");/*windowtitle*/

glutbisplayFunc(display);/*displaycallbackinvokedwhenwindow

opened*/A

myinit();/*setattributes*/AA

glutMainLoopO;/*entereventloop*/陶A,

⑥3編寫二維圖形學(xué)的應(yīng)用程序

第二章圖形學(xué)編程

?2.1OpenGL簡介

?2.2Siepinski鏤墊

?2.3編寫二維圖形應(yīng)用程序

?2.4OpenGLAPI

?2.5圖元和屬性

?2.6顏色

?2.7觀察

?2.8控制函數(shù)

?2.9Siepinski鏤墊繪制程序

?2.10多邊形和遞歸

?2.11三維Siepinski鏤墊

?2.12繪制隱函數(shù)曲線

?2.13基于三角網(wǎng)格的等值線繪制

2.4OpenGLAPI

?AP工的分類

?定義圖元

>改變機(jī)器內(nèi)部的狀態(tài)或者返回狀態(tài)信息

2.4OpenGLAPI

?OpenGL接口

GLU

GLX

2.4OpenGLAPI

?圖形函數(shù):7類API

A圖元函數(shù)

FunctioncallsOutput

/線段UserAGraphics-AInput/Output

program<system._________devices

/多邊形DataInput

A屬性函數(shù)

A視圖函數(shù)(或觀察函數(shù))

A變換函數(shù)

A控制函數(shù)

A查詢函數(shù)

?輸入及窗口函數(shù)(GLUT)

第二章圖形學(xué)編程

?2.1OpenGL簡介

?2.2Siepinski鏤墊

?2.3編寫二維圖形應(yīng)用程序

?2.4OpenGLAPI

?2.5圖元和屬性

?2.6顏色

?2.7觀察

?2.8控制函數(shù)

?2.9Siepinski鏤墊繪制程序

?2.10多邊形和遞歸

?2.11三維Siepinski鏤墊

?2.12繪制隱函數(shù)曲線

?2.13基于三角網(wǎng)格的等值線繪制

2.5圖元和屬性

?OpenGL支持兩類圖元

?幾何圖元:點(diǎn)、線段、多邊形、曲線和曲面

?圖像

GeometricPipeline

Transform?Clip?Project

OpenGL

Frame

applicationAPixeloperations

buffer

program

PixelPipeline

2.5圖元和屬性

?點(diǎn)和線段的類型

GLPOINTSGLLINESGL_LINE_STRIPGL_LINE_LOOP

2.5圖元和屬性

?多邊形的基本概念

?多邊形被正確顯示:多邊形是簡單的、

凸的和平面的。

?-二;二

3一二,

2.5圖元和屬性

?多邊形的基本概念

2.5圖元和屬性

?OpenGL中多邊形類型

p2P2P2P2

Pi.?.P3PiP3PiP3PiP3

Pot也PoP4PoP4PoP4

P7*?5P7P5P7P5P7P5

P6P6P6P6

GLPOINTSGL_POLYGONGL_QUADSGLJRIANGLES

PiP3P5P7

PoP2P4P6

GL_TRIANGLE_$TRIPGL_QUAD_STRIP

2.5圖元和屬性

?利用多邊形近似球面

x(0,①)二sin0cos①

y(6,①j二cos6cos①

z(0,①,二sin①

2.5圖元和屬性

?利用多邊形近似球面

for(phi=-80;phi<=80;phi+=20)

{phir=c*(phi+20);

phir20=c*(phi+20);

glBegin(GL_QUAD_STRIP);

For(theta=-180.0;theta<=180;theta+=20)

{thetar=c*theta;

X=sin(thetar)*cos(phir);

Y=cos(thetar)*(phir);

Z=sin(phir);

glVertex3d(x,y,z);

X=sin(thetar)*cos(phir20);

Y=cos(thetar)*cos(phir20);

Z=sin(phir20);

gIVertex3d(x,y,z)}

glEnd;}

2.5圖元和屬性

?利用多邊形近似球面(續(xù))

glBegin(GL_TR工ANGLE_FAN);

gIVertex3d(0.0,0.0,1.0);

c=M_PI/180;

c80=c*80;

z=sin(c80);

For(theta=-180.0;theta<=180;theta+=20)

{thetar=c*theta;

X=sin(thetar)*cos(c80);

Y=cos(thetar)*cos(c80);

glVertex3d(x,y,z);

)

glEndQ;

2.5圖元和屬性

?利用多邊形近似球面(續(xù))

glBegin(GL_TRIANGLE_FAN);

gIVertex3d(0.0,0.0,-1.0);

z=-s

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論