2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩10頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p><b>  目 錄</b></p><p>  一.設(shè)計內(nèi)容與要求…………………………………………2</p><p>  1.1 總體目標(biāo)和要求……………………………………2</p><p>  1.2 內(nèi)容與要求…………………………………………2</p><p>  二.總體設(shè)計………………………

2、…………………………2</p><p>  2.1 球的消隱處理基本原理……………………………2</p><p>  2.2 具體設(shè)計實現(xiàn)………………………………………3</p><p>  三.詳細(xì)設(shè)計…………………………………………………3</p><p>  3.1 程序流程圖…………………………………………3</p>&

3、lt;p>  3.2調(diào)試后正確的程序清單…………………………… 5</p><p>  功能實現(xiàn)……………………………………………… 10</p><p>  4.1程序運行結(jié)果………………………………………10</p><p>  4.2 功能實現(xiàn)及分析……………………………………10</p><p>  總結(jié)………………………………

4、…………………… 11</p><p>  參考文獻(xiàn)……………………………………………… 11</p><p>  球體背面剔除消隱算法</p><p>  第1章 設(shè)計內(nèi)容與要求</p><p><b>  總體目標(biāo)和要求</b></p><p>  課程設(shè)計的目的:以圖形學(xué)算法為目標(biāo),深入研究

5、。繼而策劃、設(shè)計并實現(xiàn)一個能夠表現(xiàn)計算機(jī)圖形學(xué)算法原理的或完整過程的演示系統(tǒng),并能從某些方面作出評價和改進(jìn)意見。通過完成一個完整程序,經(jīng)歷策劃、設(shè)計、開發(fā)、測試、總結(jié)和驗收各階段,達(dá)到:</p><p>  鞏固和實踐計算機(jī)圖形學(xué)課程中的理論和算法;</p><p>  學(xué)習(xí)表現(xiàn)計算機(jī)圖形學(xué)算法的技巧;</p><p>  培養(yǎng)認(rèn)真學(xué)習(xí)、積極探索的精神;</p

6、><p>  具備通過具體的平臺實現(xiàn)圖形算法的設(shè)計、編程與調(diào)試的能力;</p><p>  完成對實驗結(jié)果分析、總結(jié)及撰寫技術(shù)報告的能力。</p><p>  總體要求:策劃、設(shè)計并實現(xiàn)一個能夠充分表現(xiàn)圖形學(xué)算法的演示系統(tǒng),界面要求美觀大方,能清楚地演示算法執(zhí)行的每一個步驟。</p><p>  開發(fā)環(huán)境:Viusal C++ 6.0</p

7、><p><b>  1.2 內(nèi)容與要求</b></p><p>  球體背面剔除消隱算法</p><p><b>  內(nèi)容:</b></p><p> ?。?)掌握背面剔除消隱算法原理;</p><p> ?。?)實現(xiàn)矢量點積與叉積運算;</p><p>

8、;<b> ?。?)透視投影變換</b></p><p>  (4)曲面體經(jīng)緯線劃分方法</p><p><b>  功能要求:</b></p><p> ?。?)繪制球體線框模型的透視投影圖,使用背面剔除算法實現(xiàn)動態(tài)消隱;</p><p>  (2)通過右鍵菜單顯示消隱效果,右鍵菜單有兩個選項:未

9、消隱與消隱;</p><p> ?。?)使用鍵盤的上下左右控制鍵旋轉(zhuǎn)消隱前后的球體;</p><p> ?。?)單擊左鍵增加視距,右擊縮短視距;</p><p><b>  第2章 總體設(shè)計</b></p><p>  2.1 球的消隱處理基本原理</p><p>  球體的曲面通常采用一組網(wǎng)格

10、多邊形來表示,即把曲面離散成許多小平面片,用平面逼近曲面,一般使用許多四邊形來逼近曲面。網(wǎng)格四邊形愈多,逼近曲面的精度就愈高,逼近效果就愈好,曲面看起來就越光滑。一般根據(jù)實際需要來確定合適的逼近精度即網(wǎng)格多邊形數(shù)目。當(dāng)曲面表示為一組網(wǎng)格多邊形時,消隱處理的主要工作是確定各網(wǎng)格多邊形的可見性,由此可用平面立體的算法對曲面進(jìn)行消隱處理。</p><p><b>  球面的參數(shù)方程為:</b>&l

11、t;/p><p>  x=R· sina·cosβ</p><p>  y=R· sina· sinβ (0≤a≤π, 0≤β≤2π)</p><p><b>  z=R· cosa</b></p><p>  設(shè)兩個參數(shù)a和β對球面進(jìn)行網(wǎng)格化,當(dāng)相鄰的曲線參數(shù)分別為a

12、1、a2、β1、β2時,構(gòu)成四邊形網(wǎng)格P0P1P2P3,其外法線N表示如下:</p><p>  N= P0P1×P1P2</p><p>  對N進(jìn)行單位化:n={nx,ny,nz}= n/|N|</p><p>  若設(shè)視方向為S,其平行于y軸: S={0,1,0}</p><p> ?、?n·S= ny≥0,網(wǎng)格可見

13、,畫出;</p><p> ?、?n·S= ny<0,網(wǎng)格不可見,不畫 </p><p>  2.2 具體設(shè)計實現(xiàn)</p><p>  (1) 掌握運行環(huán)境Visual C++編程、調(diào)試方法,熟練掌握OpenGL的使用,并能將兩者相結(jié)合完成實驗設(shè)計;</p><p>  (2) 理解球體背面剔除消隱算法的基本原理;</p

14、><p>  (3) 利用OpenGL中的函數(shù)繪制一個線框球并顯示出來。具體方案如下:</p><p> ?。╝)先通過透視投影變換繪制出小四邊形平面片,進(jìn)行球體線框模型的繪制。</p><p> ?。╞)完成球體的繪制后,進(jìn)行設(shè)置球體的旋轉(zhuǎn)效果,根據(jù)球體背面剔除消隱算法來完成球體的動態(tài)消隱。</p><p> ?。╟)創(chuàng)建右鍵菜單顯示消隱效果,

15、右鍵菜單有未消隱和消隱兩個選項。</p><p>  (d)設(shè)置使用鍵盤的上下左右控制鍵旋轉(zhuǎn)消隱前后的球體。</p><p>  (e)設(shè)置單擊鼠標(biāo)左鍵增加視距,右擊縮短視距。</p><p> ?。╢)編寫主函數(shù),然后編寫以上思想的子函數(shù),對整個程序進(jìn)行基本的代碼編寫,分模塊完成所要求的各個功能,最后進(jìn)行代碼的運行和調(diào)試。</p><p>

16、<b>  第3章 詳細(xì)設(shè)計</b></p><p><b>  3.1 程序流程圖</b></p><p><b>  程序主流程圖</b></p><p>  3.2調(diào)試后正確的程序清單</p><p>  #include <GL/glut.h></p&

17、gt;<p>  #include <stdlib.h></p><p>  #define NO_XIAOYIN 1</p><p>  #define XIAOYIN 2</p><p>  static float a=1.0f,b=0.0f,c=0.0f;</p><p>  GLfloat rtri,r

18、=1.0f; //旋轉(zhuǎn)角度</p><p>  bool bXiaoyin = true;</p><p>  void init(void) </p><p><b>  {</b></p><p>  glClearColor(0.0f, 0.0f, 0.0f, 0.0f);</p><p>

19、;  glShadeModel(GL_SMOOTH);//設(shè)為smooth處理方式</p><p>  glEnable(GL_DEPTH_TEST);//激活深度測試</p><p><b>  }</b></p><p>  void display(void)</p><p><b>  {</b&

20、gt;</p><p>  glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); </p><p>  //清除顏色緩存和深度緩存</p><p>  glLoadIdentity();</p><p>  glTranslatef(-1.0f,0.0f,-4.0f);//控制球的位置和

21、大小</p><p>  glRotatef(rtri,a,b,c);//旋轉(zhuǎn)</p><p>  glColor3f(0.0f,1.0f,0.0f);//控制球的顏色</p><p>  if(bXiaoyin)</p><p>  glutWireSphere(r, 45, 30 ) ; //初始化線框球 球體圍繞z軸分割45&l

22、t;/p><p>  次,球體沿著z軸分割30次</p><p><b>  else </b></p><p><b>  {</b></p><p>  glDisable(GL_TEXTURE_2D);</p><p>  glColorMask(0,0,0,0);<

23、/p><p>  glEnable(GL_DEPTH_TEST);</p><p>  glDepthFunc(GL_LESS);</p><p>  glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);</p><p>  glPolygonOffset(1.1f, 4.0f);</p><p

24、>  glEnable (GL_POLYGON_OFFSET_FILL); </p><p>  //auxSolidSphere(1.0);</p><p>  glutSolidSphere (r, 45, 30 ) ;//實心球</p><p>  glDisable (GL_POLYGON_OFFSET_FILL);</p>&

25、lt;p>  glColorMask(1, 1, 1, 1);</p><p>  glPolygonMode (GL_FRONT_AND_BACK, GL_LINE); </p><p>  //auxSolidSphere(1.0);</p><p>  glutSolidSphere (r, 45, 30 ) ; </p>&

26、lt;p><b>  }</b></p><p>  glutSwapBuffers(); //交換雙緩存</p><p><b>  }</b></p><p>  void reshape (int width, int height) //對屏幕窗口的形狀進(jìn)行調(diào)整</p><p>

27、;<b>  {</b></p><p>  glViewport(0, 0, width, height); </p><p>  glMatrixMode(GL_PROJECTION);</p><p>  glLoadIdentity();</p><p>  gluPerspective(45.0f, (GLfl

28、oat)width/(GLfloat)height, 0.1f, 100.0f);</p><p>  glMatrixMode(GL_MODELVIEW);</p><p>  glLoadIdentity();</p><p><b>  }</b></p><p>  void processMenuEvents(

29、int option)//此函數(shù)處理根據(jù)菜單選項來執(zhí)行的動作</p><p><b>  {</b></p><p>  switch (option) {</p><p><b>  case 1:</b></p><p>  bXiaoyin = true;</p><p&

30、gt;  glutPostRedisplay();</p><p><b>  break;</b></p><p><b>  case 2:</b></p><p>  bXiaoyin = false;</p><p>  glutPostRedisplay();</p><

31、;p><b>  break;</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  void createGLUTMenus()//創(chuàng)建菜單</p><p><b>  {</b></p

32、><p><b>  int menu;</b></p><p>  menu = glutCreateMenu(processMenuEvents);</p><p>  glutAddMenuEntry("消隱",XIAOYIN);//在菜單中添加選項</p><p>  glutAddMenuEnt

33、ry("未消隱",NO_XIAOYIN);</p><p>  glutAttachMenu(GLUT_RIGHT_BUTTON);</p><p><b>  }</b></p><p>  void keyboard(unsigned char key, int x, int y) ////鍵盤控制球體的縮放</p

34、><p><b>  {</b></p><p>  switch (key)</p><p><b>  {</b></p><p><b>  case 'o':</b></p><p><b>  r+=0.1f;</b

35、></p><p>  glutPostRedisplay();</p><p><b>  break;</b></p><p><b>  case 'i':</b></p><p><b>  r-=0.1f;</b></p><

36、p>  glutPostRedisplay();</p><p><b>  break;</b></p><p><b>  case 'x':</b></p><p><b>  exit(0);</b></p><p><b>  brea

37、k;</b></p><p><b>  default:</b></p><p><b>  break;</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  v

38、oid keyboard1(int key,int x,int y)</p><p><b>  {</b></p><p>  switch(key)</p><p><b>  {</b></p><p>  case GLUT_KEY_LEFT://向左旋轉(zhuǎn)</p><p&

39、gt;<b>  a=0.0f;</b></p><p><b>  b=1.0f;</b></p><p><b>  c=0.0f;</b></p><p>  rtri-=2.0f;//減一個角度</p><p>  glutPostRedisplay();//重畫<

40、;/p><p><b>  break;</b></p><p>  case GLUT_KEY_RIGHT://向右旋轉(zhuǎn)</p><p><b>  a=0.0f;</b></p><p><b>  b=1.0f;</b></p><p><b&g

41、t;  c=0.0f;</b></p><p>  rtri+=2.0f;//加一個角度</p><p>  glutPostRedisplay();</p><p><b>  break;</b></p><p>  case GLUT_KEY_UP://向上旋轉(zhuǎn)</p><p>

42、<b>  a=1.0f;</b></p><p><b>  b=0.0f;</b></p><p><b>  c=0.0f;</b></p><p>  rtri-=2.0f;</p><p>  glutPostRedisplay();</p><p

43、><b>  break;</b></p><p>  case GLUT_KEY_DOWN://向下旋轉(zhuǎn)</p><p><b>  a=1.0f;</b></p><p><b>  b=0.0f;</b></p><p><b>  c=0.0f;<

44、/b></p><p>  rtri+=2.0f;</p><p>  glutPostRedisplay();</p><p><b>  break;</b></p><p><b>  default:</b></p><p><b>  break;&

45、lt;/b></p><p><b>  }</b></p><p><b>  }</b></p><p>  void mouse(int button, int state, int x, int y)//用鼠標(biāo)實現(xiàn)放大縮小</p><p><b>  {</b>&

46、lt;/p><p>  switch (button)</p><p><b>  {</b></p><p>  case GLUT_LEFT_BUTTON:</p><p><b>  r+=0.1f;</b></p><p>  glutPostRedisplay();&l

47、t;/p><p><b>  break;</b></p><p>  case GLUT_RIGHT_BUTTON:</p><p><b>  r-=0.1f;</b></p><p>  glutPostRedisplay();</p><p><b>  bre

48、ak;</b></p><p><b>  default:</b></p><p><b>  break;</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  

49、int main(int argc, char** argv)</p><p><b>  {</b></p><p>  glutInit(&argc, argv);</p><p>  glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);</p><p

50、>  //使用雙緩存模式和深度緩存</p><p>  glutInitWindowSize(800, 500); //窗口大小</p><p>  glutInitWindowPosition(200,200);//窗口在屏幕的位置</p><p>  glutCreateWindow("球體消隱");</p><p&

51、gt;<b>  init();</b></p><p>  glutDisplayFunc(display); //注冊重繪函數(shù)</p><p>  glutReshapeFunc(reshape);//注冊改變窗口形狀函數(shù) </p><p>  glutKeyboardFunc(keyboard);//注冊鍵盤動作函數(shù)</p>

52、<p>  glutSpecialFunc(keyboard1);//注冊特殊鍵盤動作函數(shù)</p><p>  glutIdleFunc(display);//設(shè)置空閑時調(diào)用的函數(shù)</p><p>  glutMouseFunc(mouse);//注冊鼠標(biāo)動作函數(shù)</p><p>  createGLUTMenus();</p><p

53、>  glutMainLoop(); //進(jìn)入主循環(huán)等待事件發(fā)生</p><p><b>  return 0;</b></p><p><b>  }</b></p><p><b>  功能實現(xiàn)</b></p><p><b>  4.1程序運行結(jié)果<

54、/b></p><p><b>  運行結(jié)果如下圖所示</b></p><p>  消隱前 消隱后</p><p>  4.2 功能實現(xiàn)及分析</p><p>  此次程序設(shè)計運用計算機(jī)圖形學(xué)所學(xué)到的知識,基本完成了課程設(shè)計所要求的功能。以下為本

55、實驗?zāi)軐崿F(xiàn)的功能:</p><p>  (1) 繪制了一個球體線框模型的透視投影圖,并使用背面剔除算法實現(xiàn)動態(tài)消隱,利用 glutWireSphere(r, 45, 30 ) ;函數(shù)初始化一個線框球,球體圍繞z軸分割45次,沿著z軸分割30 次</p><p>  (2) 通過右鍵菜單顯示消隱效果,右鍵菜單有兩個選項:未消隱與消隱,主要利用processMenuEvents()函數(shù)和c

56、reateGLUTMenus()實現(xiàn)。processMenuEvents()函數(shù)體是一個典型的switch語句。</p><p>  (3) 使用鍵盤的上下左右控制鍵旋轉(zhuǎn)消隱前后的球體;上鍵由內(nèi)向外旋轉(zhuǎn),下鍵由外向內(nèi)旋轉(zhuǎn),左鍵向左旋轉(zhuǎn),右鍵向右旋轉(zhuǎn)。</p><p>  (4) 單擊左鍵增加視距,右擊縮短視距,同時利用鍵盤字母“i”實現(xiàn)球體的縮小,字母“o”控制球體的放大,字母“x”為退出

57、窗口界面。</p><p><b>  第5章 總結(jié)</b></p><p>  課程設(shè)計是對所學(xué)課程的一個綜合應(yīng)用,是對所學(xué)課程掌握全面與否的檢驗。由于對OpenGL算法與VC++編程不是很熟悉,在設(shè)計過程中遇到了一些困難。不過通過老師、同學(xué)的指導(dǎo),以及自己查閱相關(guān)資料,這些疑惑就全部解決了,因此課程設(shè)計才得以順利完成。</p><p>  

58、本次計算機(jī)圖形學(xué)的課程設(shè)計,使我對圖形學(xué)有了更深一步的認(rèn)識,深切感受到圖形學(xué)在如今的廣泛應(yīng)用,學(xué)到了許多新知識。OpenGL的圖形繪制函數(shù)有多種,我通過查詢資料一一弄懂各個函數(shù)的含義。然后根據(jù)消隱知識,掌握球體消隱算法的基本原理和算法思想,進(jìn)而實現(xiàn)了球體的動態(tài)消隱。</p><p>  在程序設(shè)計過程中也存在不足,由于自身編程經(jīng)驗的缺乏,開始時遇到了一些困難。比如用程序?qū)崿F(xiàn)上下左右鍵盤對球體的控制,查了很多資料還

59、是沒找到,最后在同學(xué)的幫助下輕易的完成。認(rèn)識到自己的不足,在以后的學(xué)習(xí)中我會努力改正。</p><p><b>  參考文獻(xiàn)</b></p><p>  1、計算機(jī)圖形學(xué) 徐文鵬 機(jī)械工業(yè)出版社 2009.02</p><p>  2、計算機(jī)圖形學(xué)實踐教程 孔令德 清華大學(xué)出版社 2008.05 </p>

溫馨提示

  • 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(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

提交評論