




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、1貝齊爾曲面設(shè)計1.1貝齊爾曲面定義設(shè)Pj(0,1,n; j = 0,1,m)為(n +1) 乂(m +1)個空間點列,則mXn次Bezier曲面定義為:P(u, v)=世 n P B (u)B (v)i=0 j=0u, V G 0,1(式 2-1)其中 B (u) = Ci ui (1 - u)m-i接點列中相鄰兩點所形成的空間網(wǎng)格 Bezier曲面的矩陣表示式是:氣q,” ” 是Bernstein基函數(shù)。依次用線段連稱之為特征網(wǎng)格。P(u,V) = B0 (u),B (u),B(u )-1P00P10P01P11P0 mP1m氣(V)B (v)1,mPn1PnmBn m (V)(式 2-2
2、)在一般實際應(yīng)用中,n、m(1)雙線性Bezier曲面當(dāng)m=n=1時不大于4。(u) B(w) pu, w 0,1(式 2-3)定義一張雙線性Bezier曲面。已知四個角點之后,則0S (u, w) = (1 - w)(1 - u) + (1 - u) p0001+ (1 - w)up uwp 、1011(式 2-4)(2)雙二次Bezier曲面當(dāng) m=n=2 時S(u, w) = y B.,2(u)Bj,2(w)p.i=0 j=0,W G0,l(式 2-5)由此式定義的曲面,其邊界曲線及參數(shù)坐標(biāo)曲線均為拋物線。(3)雙三次Bezier曲面當(dāng)m=n=3時S(u, w) = 22 B.,3(u)
3、B.,3(w)p,.i=0 j=0u, W G 0,1S (u,明=B 0,3(u) Bu) B 2,3(u) B 重(u)p 00p 01p 02p 03-B 0,3( w) _10111213B1,3(巧)p 20 p 21 p 22p 23B 2 3( w)2,3-p 30 p 31 p 32 p 33-_ B 3,3( w) _(式 2-6)(式 2-7)其矩陣表示為S(,仞=UMZBZMW-13 - 3 13 - 6 3 0U = u 3U 2U1,W = W3 W2W1, M =z - 3 30 0(式 2-8)100 01.2貝齊爾曲面性質(zhì)1. Bezier曲面特征網(wǎng)格的四個角點
4、正好是Bezier曲面的四個角點,即P(0,0)=P00P(1,0)=PM0P(0,1)=P0NP(1,1)=PMN2. Bezier曲面特征網(wǎng)格最外一圈頂點定義Bezier曲面的四條邊界;Bezier曲面邊界的跨界切矢只能 與定義該邊界的頂點及相鄰一排頂點有關(guān),且P00P10P01,P0nP1nP0,n-1,Pm0Pm-1,0Pm1,分別是四個角點的切平面;跨界二階導(dǎo)矢只與定義該邊界的及相鄰兩排頂點有關(guān)。幾何不變性、凸 包性、對稱性等性質(zhì)可由Bezier曲線的相關(guān)性質(zhì)容易推廣得到。圖2-1陰影三角形1.3貝齊爾曲面算法Bezier曲線的遞推(de Casteljau)算法,可以推廣到Bezi
5、er曲面的情形。若給定Bezier曲面特征網(wǎng)格的 控制頂點:PiJ(i = 0,1,m,j = 0,1,n)和一對參數(shù)值(u,v),則:P (u, V) = m- n l PklB(u) B . (v) = . = Pm.nU, V G 0,1i=0 j=0式(一條曲線可以表示成兩條低一次曲線的組合,一張曲面可以表示成低一次的四張曲面的線性組合。Pk ,l = v i,j其中:Pij(1 - U ) P k-1,0 + UP k-1,0iji+1, j(1 V) Pm ,l-1 + vPm,l-10, j0, j+1(k = l = 0)(k = 1,2,., m; l = 0)(k = m,
6、 l = 1,2,., n)式(2-10)或.PHPk,l = (1 一 v)P0,l-1 + VP0,l-1ijiji, j+1(1 U ) Pk -1,n + uPk-1,nIi 0i+1,0(k = l = 0)(k = 0; l = 1,2,., n)(k = 1,2,,m; l = n)式(2-11)上面給出了確定曲面上一點的兩種方案。當(dāng)按(1)式方案執(zhí)行時,先以u參數(shù)值對控制網(wǎng)格u向的n+1 個多邊形執(zhí)行曲線de Casteljau算法,m級遞推后,得到沿v向由n+1個頂點,0j )構(gòu)成的中間多邊形。再以v參數(shù)值對它執(zhí)行曲線的de Casteljau算法,n級遞推以后,得到一個P券
7、,即所求曲面上的點。 也可以按(2)式方案執(zhí)行,先以v參數(shù)值對控制網(wǎng)格沿v向的m+1個多邊形執(zhí)行n級遞推,得沿u 向由m+1個頂點 =,m)構(gòu)成的中間多邊形。再以u參數(shù)值對它執(zhí)行n級遞推,得所求點P mn 00 。1.4程序設(shè)計步驟1.4.1 Bezier曲面的生成Bezier曲面是基于Beizer曲線而定義的,有特征網(wǎng)格決定其大致形狀,而特征網(wǎng)格是由控制點確定 的。因而,繪制Bezier曲面的步驟與繪制Bezie曲面的步驟是一致的:第一,定義控制點序列;第二,定義一個二維評價器;第三,激活二維評價器;最后,創(chuàng)建網(wǎng)格。定義一個二維評價器的函數(shù)為:glMap2d()或glMap2f()函數(shù),gl
8、Map2d()函數(shù)的原型為:Void glMap2d(GLenum target, GLdouble u1, GLdouble u2, Glint ustride,Glint uorder, GLdouble v1, GLdouble v2, Glint vorder, Glint uorder, const GLdouble * points);其中,target參數(shù)表示評價器最后生成的坐標(biāo)類別,它可以取表2-1中的一個常量:常量含義GL_MAP2_VERTEX_3用(x,y,z)描述一個控制點GL_MAP2_VERTEX_4用(x,y,z,w)描述一個控制點GL_MAP2_INDEX控制點
9、代表一個顏色素引值GL_MAP2_COLOR_4控制點是RGBA顏色值GL_MAP2_NORMAL控制點是一個法線向量GL_MAP2_TEXTURE_COORD_1控制點是一個紋理坐標(biāo)的s分量GL_MAP2_TEXTURE_COORD_2控制點是一個(s,t)紋理坐標(biāo)GL_MAP2_TEXTURE_COORD_3控制點是一個(s,t,r)紋理坐標(biāo)GL_MAP2_TEXTURE_COORD_4控制點是一個(s,t,r,q)紋理坐標(biāo)表2-11.4.2繪制網(wǎng)格曲面(1)添加一個菜單添加一個名為Surface的菜單,在其屬性對話框里的Caption欄中鍵入Surface0為其增加一個菜單項, 其名為
10、Bezier,在其屬性對話框的 Caption 欄中鍵入 8。21。勾選 Pop-up 屬性。按表 2-2 完成。CaptionID&MeahIDM_BZRSUFAC_MESH&FillIDM_BZRSUFAC_FILL&TextureIDM_BZRSUFAC_TEXTURE表2-2(2)添加保護(hù)成員函數(shù)添加一個保護(hù)成員函數(shù):BzeSufacMesh(),編輯如下:Int I,j;GLfloat points443=-0.8f,-0.6f,0.8f,-0.2f,-0.6f,1.6f,0.2f,-0.6f,-0.4f,0.6f,-0.6f,0.8f,-0.6f,-0.2f,0.8f,-0.2f,
11、-0.2f,1.6f,0.2f,-0.2f,-0.4f,0.6f,-0.2f,0.8f,-0.6f,0.2f,0.8f,-0.2f,0.2f,0.4f,0.2f,0.2f,0.0f,0.3f,0.2f,-0.4f,-0.6f,0.6f,0.8f,-0.2f,0.6f,0.4f,-0.8f,0.6f,0.0f,0.8f,0.6f,-0.4f;/控制點glMap2f(GL_MAP2_VERTEX_3,0,1,3,4,0,1,12,4,(float*)controlPoints);/ 二維評價器glEnable(GL_MAP2_VERTEX_3);glColor3f(0,0,1);激活glPushM
12、atrix();glRotated(45,1,1,1);for (j=0;j8;j+)glBegin(GL_LINE_STRIP);for (i=0;i30;i+)glEvalCoord2f(float)i/30,(float)j/8);glEnd();glBegin(GL_LINE_STRIP);for (i=0;i30;i+)glEvalCoord2f(float)j/8,(float)i/30);glEnd();glPopMatrix();繪制glDisable(GL_MAP2_VERTEX_3);/掛起該函數(shù)將繪制一個網(wǎng)格曲面,因為glBegin()函數(shù)的參數(shù)為GL_LINE_STRI
13、Po編輯DrawScenc()函數(shù)在語句switch(m_typeControl).中添加語句:Case BezierSrufaceMesh:BzrSufacMesh(); break;(4)運(yùn)行程序,得到如圖2-2的結(jié)果圖2-2 Bezier網(wǎng)格曲面1.4.3繪制一個填充曲面(1)增加兩個保護(hù)函數(shù)Lighting()和 BzrSufacFill()函數(shù),Lighting()函數(shù)光照處理,BzrSufacFill()函數(shù)則繪制曲面。Lighting();glEnable(GL_AUTO_NORMAL);glEnable(GL_NORMALIZE);/光照glMap2f(GL_MAP2_VERT
14、EX_3,0,1,3,4,0,1,12,4,(float*)controlPoints); 二維評價器glMapGrid2f(30,0,1,30,0,1); / 自動網(wǎng)格glEnable(GL_MAP2_VERTEX_3); 激活glPushMatrix();glRotated(45,1,1,1);glEvalMesh2(GL_FILL,0,30,0,30);glPopMatrix();繪制glDisable(GL_MAP2_VERTEX_3);glDisable(GL_AUTO_NORMAL);glDisable(GL_NORMALIZE);glDisable(GL_LIGHTING);/掛
15、起編輯 DrawScene()函數(shù)在語句switch(m_typeControl).中添加語句;Case BezierSurfaceFill:BzeSufacFill(); break;運(yùn)行程序,得到如圖2-3的結(jié)果這是Bezier曲面的一個特性。說明:程序輸出的是斜二測投影圖,X軸正方向向右,Y軸正方向向下,X、Y、Z三個軸正方成右手坐標(biāo)系.曲面顯示在Z 軸負(fù)坐標(biāo)的位置上。圖2-4中所示為輪船船艏,首柱線與設(shè)計水線交于曲面的右上角;最大橫剖線 與設(shè)計水線交于曲面左上角:曲面右下角為首柱線與龍骨線的切點或交點:曲面左下角為最大橫剖 線與底部龍骨起跑線的交點。#include StdAfx.h#
16、include OpenGL.h/添加頭文件名 /#include #include bitmap.h #define PI (double)3.1415926) #define RADIANS(fAngle) (double)(fAngle)*PI/180.0) COpenGL:COpenGL(void):type(MESH)/類型網(wǎng)格/GLfloat points443=/ GLfloat points4*4*3= /-0.8f,-0.6f,0.8f,-0.2f,-0.6f,1.6f,0.2f,-0.6f,-0.4f,0.6f,-0.6f,0.8f, /-0.6f,-0.2f,0.8f,-
17、0.2f,-0.2f,1.6f,0.2f,-0.2f,-0.4f,0.6f,-0.2f,0.8f, / -0.6f,0.2f,0.8f,-0.2f,0.2f,0.4f,0.2f,0.2f,0.0f,0.3f,0.2f,-0.4f, / -0.6f,0.6f,0.8f,-0.2f,0.6f,0.4f,-0.8f,0.6f,0.0f,0.8f,0.6f,-0.4f /;/輸入各點坐標(biāo)/ for(int i=0;i4;i+) / for (int j=0;j4;j+) /for (int m=0;m3;m+)/controlPointsijm=pointsi*4*3+j*3+m; TOC o 1-5
18、 h z /COpenGL:COpenGL(void)/添加函數(shù)類型為 void/ wglMakeCurrent(hDC, NULL); wglDeleteContext(hRC); void COpenGL:Init(void) glClearColor(1.0,1.0,1.0,1.0);glClearDepth(1.0);glEnable(GL_DEPTH_TEST);glShadeModel(GL_SMOOTH);glDepthFunc(GL_LEQUAL);glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); bool COpenGL:S
19、etupPixelFormat(HDC hDC0) int nPixelFormat;hDC=hDC0;PIXELFORMATDESCRIPTOR pfd = sizeof(PIXELFORMATDESCRIPTOR), 1, PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER, PFD_TYPE_RGBA, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, PFD_MAIN_PLANE, 0, 0, 0, 0 ; if (!(nPixelFormat = ChoosePi
20、xelFormat(hDC, &pfd) MessageBox(NULL,can not find proper mode,Error,MB_OK|MB_ICONEXCLAMATION); /若錯誤則顯示 can not find proper modeerror/return FALSE;/返回 FLASH/ SetPixelFormat(hDC,nPixelFormat,&pfd); hRC = wglCreateContext(hDC); wglMakeCurrent(hDC, hRC); return TRUE;/返回 TURE/ void COpenGL:Reshape(int wi
21、dth,int height) / glViewport(0,0,width,height); / glMatrixMode(GL_PROJECTION); / glLoadIdentity(); / gluPerspective(60,(GLfloat)width/(GLfloat)height,0.1,3000.0);/ glMatrixMode(GL_MODELVIEW);glViewport(0,0,width,height);glMatrixMode(GL_PROJECTION);glLoadIdentity();gluPerspective(60,(GLfloat)width/(G
22、Lfloat)height,0.1,3000.0);glMatrixMode(GL_MODELVIEW);/glMatrixMode(GL_MODELVIEW);enum AspectFRONT,BACK,LEFT,RIGHT,UP,DOWN;enum ColorBLUE,GREEN,RED,ORANGE,WHITE,YELLOW;/代表顏色索引值/const GLubyte colorTable63=0,0,255,0,255,0,255,0,0,255,102,0,255,255,255,255,255,0;void COpenGL:Render()glClear(GL_COLOR_BUF
23、FER_BIT|GL_DEPTH_BUFFER_BIT);glLoadIdentity();gluLookAt(0,0,3,0,0,0,0,1,0);switch(type)case MESH:DrawMesh();/繪制網(wǎng)格/ break;case FILL:DrawFill();break;/繪制填充曲面/繪制填充曲面/DrawTexture();break;/繪制貼圖曲面/case TEXTURE:/GLint vertices83=-1,-1,-1,1,-1,-1,-1,-1,1,1,-1,1,-1,1,-1,1,1,-1,-1,1,1,1,1,1default:break;/draw
24、 stuff/ draw cube;/in order:front ,back ,left ,right,top,bottomGLubyte vertIndex64=6,2,3,7,5,1,0,4,4,0,2,6,7.3.1.5, 2,0,1,3;/ for (int i=0;i6;i+)(/glColor3ubv(colorTablei);/glBegin(GL_QUADS);/for (int j=0;j4;j+)/glVertex3iv(verticesvertIndexij);/glEnd();/glFlush();SwapBuffers(hDC);void COpenGL:DrawM
25、esh()GLfloat controlPoints443=-0.8f,-0.6f,0.8f,-0.2f,-0.6f,1.6f,0.2f,-0.6f,-0.4f,0.6f,-0.6f,0.8f,-0.6f,-0.2f,0.8f,-0.2f,-0.2f,1.6f,0.2f,-0.2f,-0.4f,0.6f,-0.2f,0.8f,-0.6f,0.2f,0.8f,-0.2f,0.2f,0.4f,0.2f,0.2f,0.0f,0.3f,0.2f,-0.4f,-0.6f,0.6f,0.8f,-0.2f,0.6f,0.4f,-0.8f,0.6f,0.0f,0.8f,0.6f,-0.4f;/定義控制點/in
26、t i,j;glMap2f(GL_MAP2_VERTEX_3,0,1,3,4,0,1,12,4,(float*)controlPoints);/二維評價器/glEnable(GL_MAP2_VERTEX_3);glColor3f(0,0,1);/激活/glPushMatrix();glRotated(45,1,1,1);for (j=0;j8;j+)glBegin(GL_LINE_STRIP);for (i=0;i30;i+)glEvalCoord2f(float)i/30,(float)j/8);glEnd();glBegin(GL_LINE_STRIP);for (i=0;isizeX,t
27、extureImage-sizeY0,GL_BGR_EXT, GL_UNSIGNED_BYTE,textureImage-data); glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_CLAMP);glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_CLAMP); glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_NEAREST); glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTE
28、R,GL_NEAREST);glTexEnvf(GL_TEXTURE_ENVGL_TEXTURE_ENV_MODE,GL_DECAL); / 構(gòu)造紋 理/ glMap2f(GL_MAP2_VERTEX_3,0,1,3,4,0,1,12,4,(float*)controlPoints);glMap2f(GL_MAP2_TEXTURE_COORD_2,0,1,2,2,0,1,4,2,(float*)controlPoints);/二維評價器:生成幾何坐標(biāo)和紋理坐標(biāo)/Lighting();glEnable(GL_TEXTURE_2D);glEnable(GL_MAP2_TEXTURE_COORD_2
29、);glEnable(GL_MAP2_VERTEX_3);glEnable(GL_AUTO_NORMAL);glEnable(GL_NORMALIZE);/光照/glMapGrid2f(30,0,1,30,0,1);glPushMatrix();glScaled(1.2,1.2,1.2);glRotated(45,0,0,1);glRotated(45,1,1,1);glEvalMesh2(GL_FILL,0,30,0,30);glPopMatrix();/繪制 /glDisable(GL_MAP2_VERTEX_3);glDisable(GL_MAP2_TEXTURE_COORD_2);gl
30、Disable(GL_TEXTURE_2D);glDisable(GL_AUTO_NORMAL);glDisable(GL_NORMALIZE);glDisable(GL_LIGHTING);/掛起/else(MessageBox(NULL,failed to load image, ,MB_OK);void COpenGL:Lighting()/編輯光照函數(shù)/GLfloat lightAmb=0.2,0.2,0.2,1;GLfloat lightPos=1,1,2,1;GLfloat matDiffuse=0,0.7,0.7,1;GLfloat matSpecular=1,1,1,1;GLfloat matShininess=60;glEnable(GL_LIGHTING);glEnable(GL_LIGHT0);glLightfv(GL_LIGHT0,GL_AMBIENT,lightAmb);glLightfv(GL_LIGHT0,GL_POSITION,lightPos);glMat
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 個人土地?zé)o償贈與合同范本
- 個人家政保潔合同范本
- 制定合同范本 作用
- fidic條件合同范本
- 買賣延期合同范本
- 醫(yī)用機(jī)甲租賃合同范本
- 凈水設(shè)備售賣合同范本
- 勞動合同范本藥店
- 出租和諧公寓合同范本
- 修建垃圾臺合同范本
- JCT908-2013 人造石的標(biāo)準(zhǔn)
- ISO9001-2015質(zhì)量管理體系要求培訓(xùn)教材
- 腦梗死臨床路徑
- 部編人教版二年級下冊道德與法治教學(xué)反思
- 第二單元整體研習(xí)+教學(xué)設(shè)計 統(tǒng)編版高中語文選擇性必修上冊
- 企業(yè)外部環(huán)境與內(nèi)部能力分析報告
- 病理科科科內(nèi)會診記錄
- 研發(fā)費用加計扣除費用PPT
- 小學(xué)生分享ppt課件-景區(qū)介紹《牛首山》
- 小學(xué)生主題班會 弘揚(yáng)航天精神 課件 (27張PPT)
- 倫理審查表(一式三份)
評論
0/150
提交評論