計(jì)算機(jī)圖形學(xué)曲線和曲面造型_第1頁
計(jì)算機(jī)圖形學(xué)曲線和曲面造型_第2頁
計(jì)算機(jī)圖形學(xué)曲線和曲面造型_第3頁
計(jì)算機(jī)圖形學(xué)曲線和曲面造型_第4頁
計(jì)算機(jī)圖形學(xué)曲線和曲面造型_第5頁
已閱讀5頁,還剩37頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、第三專題 曲面造型的發(fā)展趨勢(shì)曲面造型的發(fā)展趨勢(shì) 曲線的參數(shù)方程 )( )( )( tzz tyy txx 給定一個(gè)t值,就得到曲線上一點(diǎn)的坐標(biāo)。當(dāng)t在參 數(shù)域a,b內(nèi)連續(xù)變化時(shí),就得到了曲線。為了方便起見, 可以將a,b區(qū)間規(guī)范化成0,1。 kjip)()()()(tztytxt 曲線參數(shù)表示矢量方程式 )()()()(tztytxt, pp 給定一個(gè)t值,就得到曲線上一點(diǎn)的坐標(biāo)。當(dāng)t在參 數(shù)域a,b內(nèi)連續(xù)變化時(shí),就得到了曲線。為了方便起見, 可以將a,b區(qū)間規(guī)范化成0,1。 螺旋線的參數(shù)方程可以寫為螺旋線的參數(shù)方程可以寫為 bz ay ax sin cos ),( v bt 螺旋線的重要性質(zhì)

2、:螺旋線的重要性質(zhì): ,: 00 ,: 00 bbbz 上升的高度與轉(zhuǎn)過的角度成正比即上升的高度與轉(zhuǎn)過的角度成正比即 上升的高度上升的高度 bh2 螺距螺距 ,2 tax cos tay sin vtz 或 曲線參數(shù)方程實(shí)例曲線參數(shù)方程實(shí)例 ),( ),( ),( vuzz vuyy vuxx 雙參數(shù)描述表達(dá)式 曲面的范圍通常用兩個(gè)參數(shù)u和v的變化區(qū)間的矩形區(qū)域 2121 ,vvvuuu 給出。這種曲面通常叫做矩形域曲面。參數(shù)u和v的變化區(qū)間一般規(guī)范為0,1, ),(),(),(),vuzvuyvuxvu s(s ),(zyx 矢量方程式為 當(dāng)參數(shù)u,v在參數(shù)域0,1中連續(xù)變化時(shí),其對(duì)應(yīng)點(diǎn) 就

3、形成一張曲面。 向線稱為曲面的參數(shù)曲線(等參數(shù)線)。u,v 分別等于0,1時(shí)的參數(shù)曲線。 ),(),(),() 0000 vuzvuyvuxvu s(s v ),(),(),(),( 0000 vuzvuyvuxvu ss uv ) 1 ,(),0 ,(), 1 (), 0(ususvsvs ) 1 , 1 (),0 , 1 (),1 , 0(),0 , 0(ssss 當(dāng)u=u0時(shí), 表示曲面上一條沿V方向的空間曲線,稱為 向線, 向線和 曲面的邊界曲線 曲面的四個(gè)角點(diǎn) u 向線。當(dāng)v=v0時(shí), 類似地,可以定義 nk du udp du udp uu k k uu k k , 1 , 0 )

4、()( 00 | 0)()( ii upup )( iii upupup )()( 2 n i nii uuBDuP 0 , 10)()( 其中)( , uB ni 被稱為Bernstein基函數(shù)。 ni in uu ini n in uuCuB ii i nni ,1 , 0)1 ( )!( ! ! )1 ()( , ) 1(*) 1(lk ), 1 , 0;,1 , 0( , ljkiD ji lk * lk * k i l j jlikji vuvBuBDvuS 00 , 1 , 0,)()(),( 。 )( , uB ik ik uuCuB i i kik )1 ()( , )( ,

5、vB jl jl j j ljl uuCvB )1 ()( , 為u向Bernstein基函數(shù), 為v向Bernstein基函數(shù), ), 1 , 0(niDi n i kii uufDuB 0 , 10),()( )( , uf ki 110 ki uuu ), 1 , 0(niDi 稱為B樣條基函數(shù),是由節(jié)點(diǎn)矢量U: 所決定的k次分段多項(xiàng)式。順序連接控制頂點(diǎn) 所形成的多邊形成為控制多邊形。 移動(dòng)定點(diǎn)對(duì)B樣條曲線的影響 k次B樣條曲線與k+1個(gè)頂點(diǎn)有關(guān) )()( , vfuf ljki 與 ), 1, 0;, 1, 0(njmiDij ) 1() 1(nm), 1, 0;, 1, 0(njmi

6、Dij 110 , km uuuU 110 , ln vvvV n i m j nlmkljkiij uuvuuuvfufDvuS 00 11, , )()(),(, n j kjj kii ki n i kii uB uB uR uRduP 0 , , , 0 , )( )( )( )()( )( , uR ki )( , uR ki 式中稱為k次有理基函數(shù), 具有和k次B樣條基函數(shù)相同的性質(zhì) n i kii n i kiii uB uBd uP 0 , 0 , )( )( )( ni i , 1 , 0, nidi, 1 , 0, 0, 0, 0 in 其余 )( , uB ki , 11

7、0 kn uuuU 式中:分別與 首、末權(quán)因子 。 為由節(jié)點(diǎn)矢量 節(jié)點(diǎn)矢量中的節(jié)點(diǎn)數(shù)為m=n+k+1,n為控制點(diǎn)數(shù),k為B樣條基函數(shù)的次數(shù)。 決定的k次B樣條基函數(shù)。 控制頂點(diǎn) 相聯(lián)系。 權(quán)因子 n i m j ljkiji n i m j ljkijiji vBuB vBuBd vuP 00 , 00 , )()( )()( ),( ji d , ji, )( , uB ki )( , vB lj 式中:控制頂點(diǎn)網(wǎng) 權(quán)因子 :v向節(jié)點(diǎn)矢量 :沿v向的l次B樣條基函數(shù) :沿u向的k次B樣條基函數(shù) :u向節(jié)點(diǎn)矢量u v NurbsNurbs曲線數(shù)據(jù)結(jié)構(gòu)圖曲線數(shù)據(jù)結(jié)構(gòu)圖 NurbsNurbs曲面數(shù)

8、據(jù)結(jié)構(gòu)圖曲面數(shù)據(jù)結(jié)構(gòu)圖 classCurve public: intCurveNo; *曲線號(hào)* intk; *曲線次數(shù)* ControlPointCP; *控制點(diǎn)指針* KnotVectorKV; *節(jié)點(diǎn)矢量指針* classControlPoint public: intVertexNo; *控制點(diǎn)序號(hào)* doubleVertex3; *控制點(diǎn)坐標(biāo)* doubleWeight; *控制點(diǎn)權(quán)因子* public: voidFormatControl(CStringstr); ; classKnotVector public: intKnotNo; *節(jié)點(diǎn)序號(hào)* intMultiplicity

9、; *節(jié)點(diǎn)重復(fù)度* doubleKnotValue; *節(jié)點(diǎn)值* public: voidFormatKnot(CStringstr); ; VCVC寫的寫的NURBSNURBS曲線數(shù)據(jù)結(jié)構(gòu)曲線數(shù)據(jù)結(jié)構(gòu) classSurface ControlPoint*Up; ControlPoint*Vp; KnotVector*KU; KnotVector*KV; VCVC寫的寫的NURBSNURBS曲面的數(shù)據(jù)結(jié)構(gòu)曲面的數(shù)據(jù)結(jié)構(gòu) 控制點(diǎn)、節(jié)點(diǎn)的可視化實(shí)現(xiàn)控制點(diǎn)、節(jié)點(diǎn)的可視化實(shí)現(xiàn) 為實(shí)現(xiàn)對(duì)控制點(diǎn)、節(jié)點(diǎn)鏈表實(shí)時(shí)進(jìn)行插入、刪除和修改 等操作,可將這些操作同對(duì)話框聯(lián)系起來。并通過操作對(duì)話框 上的控件,實(shí)現(xiàn)對(duì)控制

10、點(diǎn)、節(jié)點(diǎn)鏈表實(shí)時(shí)插入、刪除和修改等 操作過程的可視化。 利用VC實(shí)現(xiàn)控制點(diǎn)鏈表的插入、刪除和修改等操作 過程的可視化的過程如下: (2)建立與對(duì)話框相聯(lián)系的類CmodifierVertex,同時(shí)編寫與按 鈕相關(guān)的成員函數(shù)OnAdd()、OnInsert()、OnUpdate()、 OnRemoveAt()和OnRemoveAll(); (1)建立如圖1所示的對(duì)話框,對(duì)話框中有按鈕Add、Insert、 Update、RemoveAt、RemoveAll,可對(duì)控制點(diǎn)鏈進(jìn)行操作;有組合 框可顯示控制點(diǎn)鏈表中的數(shù)據(jù); (3)將控制點(diǎn)鏈表中的數(shù)據(jù)在組合框中顯示出來。 voidCModifierVert

11、ext:OnAdd() TODO:Addyourcontrolnotificationhandlercode here if(UpdateData()!TRUE) return; ControlPoint*pControlnewControlPoint; pControlVertexNom_VertexNo; pControlVertex0m_Vertexx; pControlVertex1m_Vertexy; pControlVertex2m_Vertexz; pControlWeightm_Weight; ControlPoint_ListAddTail(pControl); AddToL

12、istBox(pControl);*將數(shù)據(jù)添加到組合框* 添 加 操 作 的 程 序 設(shè) 計(jì) 實(shí) 例 PIXELFORMATDESCRIPTOR pixelDesc; /像素存儲(chǔ)格式化, 對(duì)結(jié)構(gòu)變量進(jìn)行了填充; pixelDesc.nSize = sizeof(PIXELFORMATDESCRIPTOR);/pfd的大小 pixelDesc.nVersion = 1; /版本號(hào) pixelDesc.dwFlags = PFD_DRAW_TO_WINDOW | /支持窗 口 PFD_SUPPORT_OPENGL| /支持OpenGL PFD_DOUBLEBUFFER; /支持雙緩存 pixelD

13、esc.iPixelType = PFD_TYPE_RGBA; /RGBA類型 pixelDesc.cColorBits = 32; /32位色深度 pixelDesc.cRedBits = 8; /各顏色位 pixelDesc.cRedShift = 16; pixelDesc.cGreenBits = 8; pixelDesc.cGreenShift = 8; pixelDesc.cBlueBits = 8; pixelDesc.cBlueShift = 0; pixelDesc.cAlphaBits = 0; /無alpha緩存 pixelDesc.cAlphaShift = 0; /忽

14、略轉(zhuǎn)換位 pixelDesc.cAccumBits = 64; /各累計(jì)位 pixelDesc.cAccumRedBits = 16; pixelDesc.cAccumGreenBits = 16; pixelDesc.cAccumBlueBits = 16; pixelDesc.cAccumAlphaBits = 0; pixelDesc.cDepthBits = 32; /32位深度緩存 pixelDesc.cStencilBits = 0; /無模版緩存 pixelDesc.cAuxBuffers = 0; /無輔助緩存 pixelDesc.iLayerType = PFD_MAIN_P

15、LANE; /主層 pixelDesc.bReserved = 0; /保留 pixelDesc.dwLayerMask = 0; pixelDesc.dwVisibleMask = 0; pixelDesc.dwDamageMask = 0; /設(shè)置一個(gè)線程的當(dāng)前繪圖描述表 wglMakeCurrent(hDC,m_hGLContext); /對(duì)自由曲線曲面的繪制 DoNURBS(); /釋放繪圖描述表 wglMakeCurrent(hDC,NULL); /釋放RC(一般在WM_DESTORY消息響應(yīng)函數(shù)OnDestory()中 進(jìn)行) wglDeleteContext(m_hGLConte

16、xt); 至此,一個(gè)基于OpenGL的基本程序框架構(gòu)造完畢,具體對(duì) 自由型曲線曲面的構(gòu)造工作在DoNURBS()中完成。 在繪制自由曲線曲面之前用wglCreateContext()創(chuàng)建一個(gè)渲染 上下文RC并將其作為參數(shù),通過wglMakeCurrent()來建立一 個(gè)當(dāng)前的繪圖描述表,并在繪制完畢后將其釋放。 /節(jié)點(diǎn)序列 GLfloat Notes8=0.0f,0.0f,0.0f,0.0f,1.0f,1.0f,1.0f,1.0f; /定義控制點(diǎn) for(int i=0;i4;i+) for(int j=0;j4;j+) LinchpinPtij0=(GLfloat)(3.0f*(i-0.5f

17、); LinchpinPtij1=(GLfloat)(3.0f*(j-0.5f); if(0i else LinchpinPtij2=-4.0f; /創(chuàng)建NURBS曲面對(duì)象 Nurb=gluNewNurbsRenderer(); /設(shè)置NURBS曲面對(duì)象屬性 gluNurbsProperty(Nurb,GLU_SAMPLING_TOLERANCE,30.0f); gluNurbsProperty(Nurb,GLU_DISPLAY_MODE,GLU_FILL); /開始NURB區(qū)間繪制 gluBeginSurface(Nurb); /定義NURBS曲面的形狀 gluNurbsSurface(Nu

18、rb,8,Notes,8, Notes,4*3,3, /結(jié)束曲面繪制 gluEndSurface(Nurb); glPopMatrix(); /強(qiáng)制繪圖,不駐留緩存 glFlush(); void gluNurbsSurface( GLUnurbsObj * nobj, /NURBS曲面對(duì)象 GLint sknot_count, /u方向節(jié)點(diǎn)數(shù)目 GLfloat * sknot, /u方向節(jié)點(diǎn)數(shù)組指針 GLint tknot_count, /v方向節(jié)點(diǎn)數(shù)目 GLfloat * tknot, /v方向節(jié)點(diǎn)數(shù)組指針 GLint s_stride, /u方向控制點(diǎn)數(shù)據(jù)跨度 GLint t_strid

19、e, /v方向控制點(diǎn)數(shù)據(jù)跨度 GLfloat * ctlarray, /控制點(diǎn)數(shù)組指針 GLint sorder, /u方向上多項(xiàng)式階數(shù) GLint torder, /v方向上多項(xiàng)式階數(shù) GLenum type /確定求值器類型 ); 另有g(shù)luNurbsCurve()函數(shù)也可用于NURBS曲線曲面的定義,使用方法與之類似。 GLfloat Light_position=1.0f,1.0f,1.0f,0.0f,; GLfloat Light_diffuse=1.0f,1.0f,0.0f,1.0f,; glLightfv(GL_LIGHT0,GL_POSITION,Light_position); /定義 光源位置 glLightfv(GL_LIGHT0,GL_DIFFUSE,Light_diffuse); /定義光 源漫射光 glEnable(GL_AUTO_NORMAL); /自動(dòng)生成曲面法向量 glEnable(GL_LIGHTING); /啟動(dòng)光照模型; glEnable(GL_LIGHT0); /使光源GL_LIGHT0有效 OpenGL中所指的材質(zhì)均指構(gòu)成三維實(shí)體的材料在光照模型中對(duì) 于R、G、B三原色的反射率。與光源的定義類似,材質(zhì)的定義 分環(huán)境、漫射、 鏡面

溫馨提示

  • 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)論