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

下載本文檔

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

文檔簡(jiǎn)介

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

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

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

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

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

6、><p>  具備通過(guò)具體的平臺(tái)實(shí)現(xiàn)圖形算法的設(shè)計(jì)、編程與調(diào)試的能力;</p><p>  完成對(duì)實(shí)驗(yàn)結(jié)果分析、總結(jié)及撰寫(xiě)技術(shù)報(bào)告的能力。</p><p>  總體要求:策劃、設(shè)計(jì)并實(shí)現(xiàn)一個(gè)能夠充分表現(xiàn)圖形學(xué)算法的演示系統(tǒng),界面要求美觀大方,能清楚地演示算法執(zhí)行的每一個(gè)步驟。</p><p>  開(kāi)發(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> ?。?)實(shí)現(xiàn)矢量點(diǎn)積與叉積運(yùn)算;</p><p>

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

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

10、多邊形來(lái)表示,即把曲面離散成許多小平面片,用平面逼近曲面,一般使用許多四邊形來(lái)逼近曲面。網(wǎng)格四邊形愈多,逼近曲面的精度就愈高,逼近效果就愈好,曲面看起來(lái)就越光滑。一般根據(jù)實(shí)際需要來(lái)確定合適的逼近精度即網(wǎng)格多邊形數(shù)目。當(dāng)曲面表示為一組網(wǎng)格多邊形時(shí),消隱處理的主要工作是確定各網(wǎng)格多邊形的可見(jiàn)性,由此可用平面立體的算法對(duì)曲面進(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è)兩個(gè)參數(shù)a和β對(duì)球面進(jìn)行網(wǎng)格化,當(dāng)相鄰的曲線參數(shù)分別為a

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

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

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

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

16、<b>  第3章 詳細(xì)設(shè)計(jì)</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);//激活深度測(cè)試</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 ) ;//實(shí)心球</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) //對(duì)屏幕窗口的形狀進(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ù)菜單選項(xiàng)來(lái)執(zhí)行的動(dòng)作</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);//在菜單中添加選項(xiàng)</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án)控制球體的縮放</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;//減一個(gè)角度</p><p>  glutPostRedisplay();//重畫(huà)<

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;//加一個(gè)角度</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)實(shí)現(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); //注冊(cè)重繪函數(shù)</p><p>  glutReshapeFunc(reshape);//注冊(cè)改變窗口形狀函數(shù) </p><p>  glutKeyboardFunc(keyboard);//注冊(cè)鍵盤(pán)動(dòng)作函數(shù)</p>

52、<p>  glutSpecialFunc(keyboard1);//注冊(cè)特殊鍵盤(pán)動(dòng)作函數(shù)</p><p>  glutIdleFunc(display);//設(shè)置空閑時(shí)調(diào)用的函數(shù)</p><p>  glutMouseFunc(mouse);//注冊(cè)鼠標(biāo)動(dòng)作函數(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>  功能實(shí)現(xiàn)</b></p><p><b>  4.1程序運(yùn)行結(jié)果<

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

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

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

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

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

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

溫馨提示

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

評(píng)論

0/150

提交評(píng)論