用OpenGL和MFC實現(xiàn)NURBS曲面的繪制及裁剪_第1頁
用OpenGL和MFC實現(xiàn)NURBS曲面的繪制及裁剪_第2頁
用OpenGL和MFC實現(xiàn)NURBS曲面的繪制及裁剪_第3頁
用OpenGL和MFC實現(xiàn)NURBS曲面的繪制及裁剪_第4頁
用OpenGL和MFC實現(xiàn)NURBS曲面的繪制及裁剪_第5頁
已閱讀5頁,還剩3頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第10卷第4期2004年8月上海大學(xué)學(xué)報(自然科學(xué)版)JOURNALOFSHANGHAIUNIVERSITY(NATURALSCIENCE)文章編號:100722861(2004)0420367204用OpenGL和MFC實現(xiàn)NURBS曲面的繪制及裁剪,上海200436)摘要:NURBS、形狀控制靈活性,在曲面造型和重構(gòu)中具有重要作用.該文通過分析,完成了在MFC中用OpenGL實現(xiàn)NURBS曲面的繪制及裁剪,為在逆向工程中實現(xiàn)基于型值點的曲面擬合和裁剪奠定了基礎(chǔ).關(guān)鍵詞:OpenGL;MFC;曲面中圖分類號:TP319文獻標識碼:AConstructionandTrimmingofNURBS

2、SurfaceinMFCwithOpenGLGUOJian2hua,JULu2yue(SchoolofMechatronicalEngineeringandAutomation,ShanghaiUniversity,Shanghai200436,China)Keywords:OpenGL;MFC;NURBSsurface非均勻有理B樣條(Non2UniformRationalB2Spline,簡稱NURBS)方法的提出是為了實現(xiàn)自由曲線曲面和二次曲線曲面的統(tǒng)一描述.NURBS方法的應(yīng)用大大增強了CAD/CAM系統(tǒng)的曲面造型功能,因而得到了廣泛應(yīng)用.產(chǎn)品模型數(shù)據(jù)交換的國際標準STEP(Stand

3、ardfortheExchangeofProductModelData)已經(jīng)選用NURBS作為幾何描述的主要方法1,2.一張k×1次的NURBS曲面的有理分式形式如下:nmp(u,v)=nmj=0i=0i,jdi,jNi,k(u)Nj,l(v),i,jNi,k(u)Nj,l(v)i,j(i=0,1,n;j=0,1,m)分別其中,di,j、為控制頂點及與控制頂點相聯(lián)系的權(quán)因子,Ni,k(u)、Nj,l(v)為B樣條基函數(shù).非有理與有理Bezier曲線、非有理B樣條曲線都是NURBS曲線的特殊形式.從曲面方程中可以看出,欲給出一條曲面的NURBS表示,需定義的數(shù)據(jù)包括:(1)控制頂點di

4、,j;(2)權(quán)因子i,j(i=0,1,n;j=0,1,收稿日期:2003207228作者簡介:郭建華(1974),男,山東濱州人,碩士生,主要從事計算機圖形學(xué)、造型設(shè)計、逆向工程等研究.368上海大學(xué)學(xué)報(自然科學(xué)版)第10卷m);(3)u、v參數(shù)的次數(shù)k、l;(4)u、v向節(jié)點矢ter,把窗體分成CmyFormCommandView和Cmy2DrawView兩個視區(qū)的主要實現(xiàn)如下:BOOLCMainFrame:OnCreateClient(LPCREATESTRUCTlpcs,CCreateContext3pContext)量U、V.本文先設(shè)置在MFC中OpenGL的運行環(huán)境,構(gòu)造了用于曲面

5、構(gòu)造的基本圖形框架,并且在此系統(tǒng)中編程實現(xiàn)了NURBS曲面的繪制及裁剪.m-(,1,2,WS-CHILD|WS-VE)(0,0,RUNTIME-CLASS),CSize(250,200),pContext);m-wndSplitter.CreateView(0,1,RUNTIME-CLASS(CMyDrawView),CSize(200,200),pContext);returnTRUE;(3)對話框視區(qū)事件響應(yīng)處理.在VC中,要為對話框的控件聲明成員變量,并且建立相應(yīng)的事件處理函數(shù),以響應(yīng)對應(yīng)控件狀態(tài)的變化.表1是本系統(tǒng)實現(xiàn)圖形功能顯示變化所需設(shè)定的變量及響應(yīng)函數(shù).(5)設(shè)置窗口改變方式.當

6、繪圖區(qū)窗口發(fā)生變化時,為了避免圖形的比例失調(diào),需要對視口和顯示比例進行調(diào)整.在此采用函數(shù)gluVieport指定視口矩形,用函數(shù)gluPerspective設(shè)定仰角、寬高比和深度裁剪值.voidCRenderView:OnSize(UINTnType,intcx,intcy)CView:OnSize(nType,cx,cy);1主要思路及實現(xiàn)過程在MFC中用OpenGL實現(xiàn)NURBS曲面繪制和裁剪主要分如下幾步:1.1構(gòu)造用于圖形繪制的程序框架(1)加入動態(tài)連接庫.在新建的工程ProjectSettingsLink中加入相應(yīng)的庫文件:Openg132.lib,Glu32.lib,glaux.l

7、ib,并將相應(yīng)頭文件加入視圖CSizesize(cx,cy);doubleaspect;aspect=(cy=0)?(double)size.cx:(double)size.cx/(double)size.cy;類頭文件中.創(chuàng)建一個CsplitterWnd類的對象m-wndSplit2glViewport(0,0,size.cx,size.cy);glMatrixMode(GL-PROJECTION);glLoadIdentity();gluPerspective(45,aspect,1,15.0);glMatrixMode(GL-MODELVIEW);glLoadIdentity();glD

8、rawBuffer(GL-BACK);glEnable(GL-DEPTH-TEST);第4期郭建華,等:用OpenGL和MFC實現(xiàn)NURBS曲面的繪制及裁剪表1實現(xiàn)顯示變化的變量、成員函數(shù)Tab.1Themembervariableandmemberfunctionfordisplaychange369變量名m-ControlBackColorm-ControlColorLightAmbientm-ControlColorLightSpecularm-ControlColorLightDiffusem-Lightingm-Smoothm-Antialiasm-Modelm-VRotatem-L

9、inkScalem-SliderScaleXm-SliderScaleYm-SliderScaleZ類型CStaticCStaticCStaticCStaticboolboolboolboolCSliderCtrlCSliderCtrlCSliderCtrl響應(yīng)函數(shù)OnLButtonUp()OnLButtonUp()OnLButtonUp()()()OnRadioModel()OnCheckVration()OnCheckLinkScale()OnHScroll()OnHScroll()OnHScroll()實現(xiàn)功能設(shè)背景色設(shè)環(huán)境光是否光滑處理是否反混淆顯示方式:點、線框、面填充動畫旋轉(zhuǎn)是否同

10、時縮放分別對三個坐標進行縮放1.2編程實現(xiàn)NURBS曲面繪制和裁剪(2)用gluNewNurbsRenderer()創(chuàng)建NURBS對象的指針,它指向繪制一個NURBS曲面所需要的所有狀態(tài)信息.(3)根據(jù)型值點計算節(jié)點,或直接輸入節(jié)點序列.(4)設(shè)置NURBS對象屬性,相應(yīng)函數(shù)為gluNurbsProPerty().(5)調(diào)用glBeginSurface()開始繪制曲面.(6)調(diào)用glu或gluNurbsSurface()函數(shù)生成和列,來構(gòu)造NURBS曲面.當前對曲面裁剪的數(shù)學(xué)描述有兩種方法:一種是將裁剪曲面先分割成四個邊界曲面片,對每個曲面片進行離散后,再分片擬合曲面片,這樣一張裁剪曲面被近似

11、表示為若干張四邊界未裁剪曲面.另一種方法從函數(shù)論的角度出發(fā),認為裁剪曲面是對其原始曲面的參數(shù)定義域進行限制而得到的,即一張裁剪曲面用其原始曲面的幾何定義,再加上原始曲面定義域的一個有效子區(qū)域,就完整地表達了一張裁剪曲面,該方法更能表達裁剪曲面的本質(zhì).一張裁剪曲面的有效參數(shù)域,由其外邊界及內(nèi)邊界完全確定.可以規(guī)定外邊界呈逆時針方向,稱為外環(huán).內(nèi)邊界呈順時針方向,稱為內(nèi)環(huán).在OpenGL中,采取的就是后種方法.主要構(gòu)造思路如下:(1)為了對NURBS曲面作光照處理,我們先用glEnable(GL-NORMAL)函數(shù)生成曲面的法向量.繪制NURBS曲線曲面.(7)用gluBeginTrim()、gl

12、uNurbsCurve()或gluPwlCurve、gluEndTrim()生成封閉曲線環(huán)完成對曲面的裁剪.(8)調(diào)用gluEndCurve()或gluEndSurface(),結(jié)束繪制曲線和曲面.構(gòu)造曲面實例函數(shù):voidCRenderView:OnPaint()theNurb=gluNewNurbsRenderer();gluNurbsProperty(theNurb,GLU-SAMPLING-TOLER2ANCE,50.0);gluNurbsProperty(theNurb,GLU-DISPLAY-MODE,GLU-FILL);intu,v;for(u=0;u<4;u+)for(v

13、=0;v<4;v+)ctlpointsuv0=2.03(GLfloat)u-1.5);ctlpointsuv1=2.03(GLfloat)v-1.5);/確定u,v方向的控制點370上海大學(xué)學(xué)報(自然科學(xué)版)第10卷if(u=1|u=2)&&(v=1|v=2)ctlpointsuv2=3.0;elsectlpointsuv2=-3.0;CPaintDCdc(this);HWNDhWnd=GetSafeHwnd();HDChDC=:GetDC(hWnd);wglMakeCurrent(hDC,m-hGLContext);glClear(GL-COLOR-BUFFER-BIT

14、|GL-BUFFER-BIT);glScalef(m-xScaling,m-yScaling,m-zScaling);/開始Nurbs曲面的繪制及裁剪gluBeginSurface(theNurb);gluNurbsSurface(theNurb,8,knots,8,knots,433,3,&ctlpoints000,4,4,GL-MAP2-VERTEX-3);gluBeginTrim(theNurb);/00,2,GLU-2();(theNurb);gluNurbsCurve(theNurb,8,curveKnots,2,&curvePt00,4,GLU-MAP1-TRIM-

15、2);glClearColor(m-ClearColorRed,-ClearColorBlue,1.0f);GLfloatknots8=00,0.0,0.0,1.0,1.0,1.0,1.0;/節(jié)點序列g(shù)luPwlCurve(theNurb,3,&pwlPt00,2,GLU-MAP1-TRIM-2);GLfloatedgePt52=0.0,0.0,1.0,0.0,1.0,1.0,0.0,1.0,0.0,0.0;gluEndTrim(theNurb);gluEndSurface(theNurb);intii,jj;glPointSize(4.0);glBegin(GL-POINTS);/顯

16、示控制點for(ii=0;ii<4;ii+)for(jj=0;jj<4;jj+)glVertex3fv(&ctrlpointsiijj0);glEnd();glPopMatrix();glFlush();SwapBuffers(hDC);GLfloatcurvePt42=0.25,0.5,0.25,0.75,0.75,0.75,0.75,0.5;GLfloatcurveKnots8=0.0,0.0,0.0,0.0,1.0,1.0,1.0,1.0;GLfloatpwlPt42=0.75,0.5,0.5,0.25,0.25,0.5;glPushMatrix();/平移、旋轉(zhuǎn)、縮

17、放,參數(shù)可被對話框中命令修改glTranslated(m-xTranslation,m-yTranslation,m-zTrans2lation);glRotatef(m-xRotation,1.0f,0.0f,0.0f);glRotatef(m-yRotation,0.0f,0.0f,1.0f);圖1曲面繪制及裁剪結(jié)果Fig.1Thereportofconstructingandtrimmingsurface(下轉(zhuǎn)第375頁)第4期陳紅勛,等:單流道泵內(nèi)部流動研究方法探討375鐘崢.單通道無堵塞泵內(nèi)流三維數(shù)值模擬D.清華圖7表示平行于葉輪進口平面且距葉輪進口平3大學(xué),1997.125.面為8

18、5mm處截面上的流場分布情況,從速度矢量圖4劉厚林.流道式無堵塞泵CAD軟件開發(fā)及三維不可壓可以看出,泵內(nèi)流體的運動趨勢與勢流計算時一致.湍流計算D.江蘇大學(xué),2001.115.3結(jié)束語5王元淳.邊界元法基礎(chǔ)M.上海:上海交通大學(xué)出版本文提出了研究單流道泵內(nèi)部流動的兩種方法.6,M.方法一采用勢流邊界元法對單葉片泵內(nèi)部的勢流流127.動進行了數(shù)值模擬,依次計算出單流道泵內(nèi)部流場的M.天津:天津大學(xué)出版社,1994.速度場、壓力場和葉輪上所受的徑向力.101.曹樹良,吳玉林,楊輔政.混流式水輪機轉(zhuǎn)輪內(nèi)部三維,8正,可望引入實用,定性提供有用的信息提供了一種新的方法.的數(shù)值計算方法,為今后單流道泵

19、內(nèi)部流動的深入研究提供良好的基礎(chǔ).本文的后續(xù)工作是在深入研究泵內(nèi)流動規(guī)律的基礎(chǔ)上,進一步對泵內(nèi)流場的測試方法進行研究,以驗證理論分析、計算結(jié)果的合理性.參考文獻:1關(guān)醒凡.現(xiàn)代泵技術(shù)手冊M.北京:宇航出版社,1995.417425.2關(guān)醒凡,朱榮生.單流道泵試驗研究J.農(nóng)業(yè)工程學(xué)社,1988.653.紊流的數(shù)值分析J.水力發(fā)電學(xué)報,1997,(4):5260.9梁志勇.二維水翼雜交命題的變域變分有限元解法D.上海大學(xué)應(yīng)用數(shù)學(xué)與力學(xué)研究所,2002.115.10陶文銓編著.數(shù)值傳熱學(xué)M.西安:西安交通大學(xué)出版社,1988.250311.11LaunderB.E,SpaldingDB.ThenumericalcomputationofturbulentflowsJ.ComputerMethodsinAppliedMechanics

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論