




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、計算機圖形學教案2 2016年3月22日目錄1. 個人授課守則2. 課程概貌3. 課程教學總體目標與要求4. 課程教學方式總體設計5. 課程板書總體設計6. 主頁面板書設計7. 課程教學進度安排8. 課時備課教案8.1 第1次課8.2 第2次課8.3 第3次課8.4 第4次課8.5 第5次課8.6 第6次課8.7 第7次課8.8 第8次課8.9 第9次課8.10 第10次課8.11 第11次課8.12 第12次課9. 課程綜合性實驗設計10. 英語參考詞11. 平時考勤與成績記載匯總表本科課程:計算機圖形學武漢理工大學 陸濟湘 2015計算機圖形學教案陸濟湘 2015年12月 第三版1 個人授
2、課守則為人師表 身體力行 做陽光下純凈的代表,做黑夜中引路的燭光,布局平凡,杜絕市儈,求真求新,坦然一生。 不求大富大貴,大紅大紫,惟求平安康健,無愧我心。授業傳道 教書育人 給學生一方無污的凈土,一片創意的天空,一座智慧的樹林,一泓真理的泉水,一把求知的鑰匙。 不但授人以魚,更應授人以漁,還應授人以海。答疑解惑 恪盡職守 課堂知識講解力求做到復雜問題簡單化,抽象問題形象化,枯燥問題生動化,切實幫助學生理解課程知識。 力爭深入淺出,決不故弄玄虛以示深奧。2 課程概貌課程名稱計算機圖形學課程學時48課程學分課程類型專業選修課授課方式課堂講授+實驗考核方式閉卷考試授課專業數學jd1301,信計13
3、01-02授課班級授課教師陸濟湘學時分配講課40學時上機輔導8學時起止周數1-10周學生班長課程教材計算機圖形學(OpenGL)第三版教材主編出版單位清華大學出版社課堂講授章節第一章 計算機圖形學概述第二章OpenGL繪制入門第三章 繪圖工具第四章 向量工具第五章 物體變換第六章 網格建模第七章 三維觀察第八章 幾何體真實感渲染第九章 光柵顯示工具第十章 曲線和曲面設計第十一章 顏色理論第十二章 光線跟蹤自學或在課程設計講述章節課程重點章節課程難點章節主要參考書目3 課程教學總體目標與要求3.1 課程教學總體目標本書以兩條主線貫穿其中,一條是向讀者介紹基本的計算機圖形學理論知識,另一條是在介紹
4、圖形學理論知識的同時,向讀者條理清晰地說明怎樣用OpenGL命令來實現計算機圖形的基本要素。這種互為補充的安排能使讀者更容易理解相應的理論和編程。在介紹計算機圖形學理論時,本書著重于實踐性強、實用性廣的理論,讓讀者能夠在理解理論知識的同時用OpenGL編寫實用的應用程序,而不是讓讀者去實現諸如OpenGL一類的底層圖形庫,這是有別于其他計算機圖形學教程的特點之一。因此,本書采用理論與實踐相結合的方式講解計算機圖形學理論和OpenGL圖形編程實踐,通過將二者有機地融合在一起,使讀者既掌握了計算機圖形學理論知識,又掌握了編程實踐理論的方法。這也是本書的一個重要目標:使讀者在OpenGL編程時不再感
5、到“孤立”,相互融合講解的計算機圖形學理論和OpenGL編程方法一起指導讀者編寫出更強大、更有效的應用程序。3.2 課程教學要求本書所講內容是進行計算機圖形學應用編程(如游戲編程等) 的基礎,實用性強而又容易理解,它們都是經過精心選擇的。書中包括大量的OpenGL編程示例和效果圖,所選實例具有很強的代表性,程序代碼全部采用C語言編寫,并且全部在Visual C+6.0環境下調試通過,便于讀者對計算機圖形學理論和OpenGL編程概念的理解。本書只要求讀者有一定的C語言基礎和數學知識,適合作為相關專業計算機圖形學的教材或輔助教材,還可以作為OpenGL編程以及計算機游戲編程等培訓班的理想教材,對那
6、些對OpenGL編程和計算機圖形學感興趣的讀者來說是一本不可多得的詳盡的參考用書。4 課程教學方式總體設計4.1課程教學改革重點 通過全面分析課程教學內容,針對本課程涉及面廣,實踐性強的主要特點,結合當前學生實踐環節薄弱、概念不強等教學難點,應將教學改革重點放在豐富教學方式上。4.2 首次課注意點 首次課對強化學生的課程學習興趣與學習信心十分關鍵,需交待清楚課程特點、教綱、考核方式、課堂要求、實驗等教學概況,用溫和平穩的過度方式引導學生走進課堂。4.3 設計教學切入點 找準各章節教學切入點,隨堂結合各章節講述內容中存在瓶頸問題和突破方向,補充教學內容,選擇恰當的教學手段實現教材與課堂講授間的無
7、縫鏈接,促進學生主動學習。4.4 課堂教學方式設計4.4.1 啟發式教學為主,實例式教學為輔。 力求生動講述,做到復雜問題簡單化,抽象問題形象化,枯燥問題生動化,深入淺出,不故弄玄虛以示深奧。結合工程實例,采用討論方式將有關概念以有趣的提問引出,調動學生思維積極性,營造活躍互動的課堂氛圍,提高學生的學習興趣與學習信心。4.4.2主次分明,詳略得當。 重點與難點章節只是點輔以多種教學手段詳講、講透;次重點章節知識點講清楚;一般內容章節教學重心為引導學生讀懂教材相關知識點。4.4.3語言生動、力求講授個性化。 采用PowerPoint2007上課,注意以講為主,切忌將講課變成“念課”。講授時力求語
8、言生動,用詞得當。4.5 課件設計原則4.5.1原創性原則 應根據開課任務不同的學時分配和不同的學生類型及特點,針對性設計課件,并隨教學過程出項的問題反饋及時修改課件,加之本課程可選課件資源幾乎為零,故本課程課件必須原創。4.5.2系統性原則 課件應完整放映課程講授體系,體現面向對象語言基本理論和相關概念應有的嚴謹性和系統性,突出和統一正在講授的章節標識,保留每節內容2級以上標題,便于學生筆記。4.5.3 類板書原則 課件應按傳統黑板板書方式設計,姑且稱為“電子黑板”。頁面上切不可堆砌大量文字段落,僅豐富圖片、繪圖等傳統黑板不好表達的多媒體信息即可。4.5.4 動畫性原則 課件文字按最接近手寫
9、的方式動畫,繪圖過程、分段制造過程等內容按步驟動畫解決傳統教學中繪圖、建造工藝過程表述抽象、學生難以理解等教學瓶頸問題,幫助學生較好的理解講授內容。4.5.5美觀性原則 精心設計,力求美觀與實用完美結合。課件整體風格統一,制作精美,從細節上體現講授者的嚴謹學風,潛移默化的言傳身教。4.6 課程資源建設 原創設計課程學習網站,設立電子黑板、全程教學錄像等豐富的網絡教學資源,有效幫助學生拓展學習空間,便于課后復習鞏固。 5 課程板書總體設計5.1設計課程導航頁首頁設課程導航頁,總覽全課程內容。5.2設計章首頁 每章設一開始頁面,明確本章內容。5.3設計節首頁每節設一開始頁面,明確本節內容。5.4主
10、頁面分區設計主頁面分標題、側邊、主內容三區。5.5設計節內容每節設具體實例頁面,加深本節印象。5.6設計章末頁每章設一結束頁面,布置學生任務6 主頁面板書設計6.1主頁面分區 頁面主要分為章節標題區、主內容區、側邊前內容目錄區三大部分。6.2頁面布局 主頁面內圖片文字等布局勻稱。6.3頁面背景 全課程頁面背景一致,避免雜亂。統一選用深藍色背景,以反突出文字和圖片等前端內容。6.4側邊目錄區側邊前述內容目錄區記錄本頁前面所述節的一、二、三級標題,以方便學生溫習或補課堂筆記。6.5頁面主文字色彩及大小文字色彩明亮,大小適中,風格統一。章節標題金黃色,黑體,36號字;一級標題白色,黑體,24號字;二
11、級標題及正文白色,黑體,字號視頁面布局在選擇2024號字間選擇,不宜再小,以方便后排學生筆記。6.6關鍵詞和英文單詞用與主文字不同的顏色標明關鍵詞和英文單詞。7 課程教學進程安排教學周一二三四五六七八九十十一十二十三學時數4444444646466進程線道圖第一章第四章第七章第二章第八章第三章第五章第六章第十一章圖例一般章節重點章節次重點章節科 目計算機圖形學總學時講課實踐專業班數學jd1301,信計1301-0248408周次課次授課內容學時實驗、習題、大作業內容學時一計算機圖形學概述 21、vc6.0安裝,建立控制臺工程,OpenGL庫配置,運行簡單OpenGL程序2一計算機圖形學控制臺應
12、用程序創建,OpenGL庫配置,簡單程序講解2二三OpenGL繪圖入門,窗口編程和窗口繪圖,OpenGL基本圖形元素函數4三四OpenGL中的直線繪制,OpenGL與鼠標和鍵盤的交互,繪制Sierpinski墊片,繪制函數曲線42、繪制Sierpinski墊片,繪制函數曲線和參數曲線2五六世界窗口和視口,裁剪線算法,正多邊形、圓和圓弧的繪制,參數曲線的繪制6七八圖形學中的向量工具,點積,叉積,重要幾何對象的表示,求兩個線段的交點,直線和平面求交及裁剪,多邊形求交問題6九十物體幾何變換初步,三維仿射變換,坐標系變換63 繪制邏輯圖和混沌的模擬,實現Cohen-Sutherland裁剪算法2十一十
13、二在程序中使用仿射變換,使用OpenGL繪制三維場景6十三多邊形實體網格建模,多面體和拉伸形體44 利用三維仿射變換繪制三維場景28 課時備課教案第1次課時間地點授課章節第1章 緒論§ 1.1什么是計算機圖形學 § 1.2計算機圖形學的應用§ 1.3計算機生成圖像的方法 § 1.4常用的圖形顯示設備§ 1.5交互設備授課方式課堂講授教學時數4注意事項教學目標使學生了解課程特點、教綱、考核方式、課堂要求、實驗等教學概況,初步理解和掌握計算機圖形學發展進程以及注意事項。教學重點1. 計算機生成圖像的方法2. 計算機圖形學開發過程教學難點教學設計1.
14、 本次課為首次課,對強化學生的課程學習興趣與學習信心十分關鍵,應交待清楚本課程特點、教綱、考核方式、課堂要求、實驗、教學資源等課堂教學概況,以認識幾個新學生的溫和點名方式過渡,引導學生走進課程。2. 從現實生活出發,充分讓學生了解面向對象的思想。3. 補充計算機圖形學基本概念和背景知識,以實例計算機圖形學研究內容和研究方法,并以此為切入點導出程序開發流程。4. 結合工程實際,采用典型案例說明當前開發模式的設計思路和應用側重點不同所衍生的不同開發模式,啟發學生多方位思維,激發創新意識。5. 詳講計算機圖形學基本概念、特點以及相關內容。教學切入從計算機程序設計語言的發展以及面向對象方法入手,幫助學
15、生認識和理解面向對象的思想。拓展內容1. 計算機圖形學基本概念2. 計算機圖形學背景3. 計算機圖形學開發實例教學內容教具使用PPT課件課堂練習課后思考與習題課堂反饋隨堂記錄第2次課時間地點授課章節第二章vc opengl 編程指導例子§ 2.1編寫圖形程序 § 2.2學習OpenGL程序的基本組成授課方式課堂講授教學時數6注意事項教學目標 本章讓學生開始編寫圖形程序,包括用OpenGL編程和開發幾個完整曲線繪制程序(包括矛名的Sierpinski墊圈). 本章討論了用OpeoGL 繪制基本元素(如折線和多邊形)的方法和如何在程序中交互地使用鼠標和鍵盤。最后的實例分析會給一
16、些有趣的編段題目。它們能讓學生對如何編寫圖形程序有更加清晰的感覺。其中的一個典型實例分析是建立一個用子初始化OpenGL和打開一個OpenGL繪制窗口的類。教學重點1.如何在程序中交互地使用鼠標和鍵盤2.開發幾個完整曲線繪制程序教學難點如何在程序中交互地使用鼠標和鍵盤教學設計教學切入從C+基本概述入手,一步一步加深對C+的了解。拓展內容教學內容§ 2.1 生成圖像初步 通過練習(編寫和測試各種不同圖形的程序)可以很快掌握計算機圖形學。先從簡單的任務開始,一旦掌握,就試著變變花樣,看看有哪些變化,試著進一步繪制更復雜的場景。最好的學習辦法是認真、仔細地學習每行代碼或等式。當你這么做時,
17、就能理解每個新概念。每個圖形程序都以一些初始化工作為開始,由此建立程序所需要的顯示模型和坐標系。 下面是使用GLUT庫,名為myMouse的回調函數例子,它方便地注冊了與鼠標關聯的事件:glutMouseFunc(myMouse);glutMouseFunc是GLUT庫的固有函數,但是回調函數myMouse是程序員定義的,并由程序員編寫代碼,處理每個可能感興趣的鼠標動作。 4種主要的OpenGL庫:1)基本GL庫,OpenGL庫的基礎。它提供OpenGL的基本函數。每個OpenGL函數都以字符GL開頭。2)GLUT庫:GL實用工具包。它用來打開窗口,開發和管理菜單,以及管理事件等。3)GLU庫
18、:GL實用庫,它提供高級例程,處理矩陣操作和繪制二次曲面如球和圓柱體;4)GLUI庫:用戶接口庫,提供控制工具和菜單。glutDisplayFunc(myDisplay):重繪窗口調用myDisplay回調函數;glutReshapeFun(myReshape):對屏幕窗口的形狀進行調整;void main()glutDisplayFunc(myDisplay); / 注冊重繪函數glutReshapeFunc(myReshape); / 注冊改變窗口形狀函數glutMouseFunc(myMouse); / 注冊鼠標動作函數glutMotionFunc(myMouse); / 注冊鼠標移動函
19、數glutKeyboardFunc(myKeyboard); / 注冊鍵盤動作函數/可能初始化其他工作glutMainLoop(); / 進入主循環等待事件發生void main(int argc, char* argv)glutInit(&argc, argv); / 初始化工具包glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB); / 設置顯示模式glutInitWindowSize(640,480); / 設置窗口大小glutInitWindowPosition(100, 150); / 設置窗口在屏幕上的位置glutCreateWindow(
20、"my first attempt"); / 打開屏幕窗口/ 注冊回調函數glutDisplayFunc(myDisplay);glutReshapeFunc(myReshape);glutMouseFunc(myMouse);glutKeyboardFunc(myKeyboard);myInit(); / 必要的其他初始化工作glutMainLoop(); / 進入循環§ 2.2OpenGL的基本圖形元素繪制三個點:glBegin(GL_POINTS);glVertex2i(100, 50);glVertex2i(100, 130);glVertex2i(150
21、, 130);glEnd();或者用浮點值代替整數值:glBegin(GL_POINTS);glVertex2d(100.0, 50.0);glVertex2d(100.0, 130.0);glVertex2d(150.0, 130.0);glEnd();2.2.2 Sierpinski(塞平斯基)墊片/初始值P(0),在for循環外面GLintPoint point = Tindex; / 初始值drawDot(point.x, point.y); / 畫初始點for(int i = 0; i < 1000; i+) /畫1000點index = rand()%3;/P(k)=(P(k
22、-1)+T)/2point.x = (point.x + Tindex.x) / 2;point.y = (point.y + Tindex.y) / 2;drawDot(point.x,point.y);教具使用PPT課件課堂練習課后思考與習題復習第二章,預習第三章思考:2-12-17、2-21、2-22、 2-252-27上機題:2-19、2-20、2-28、2-30、2-31、2-33實驗二課堂反饋隨堂記錄第3次課時間地點授課章節第二章vc opengl 編程指導例子§ 2.3開發繪制點、直線、折線和多邊形的基本圖形工具§ 2.4學會用鼠標和鍵盤控制程序授課方式課堂講
23、授教學時數6注意事項教學目標 本章讓學生開始編寫圖形程序,包括用OpenGL編程和開發幾個完整曲線繪制程序(包括矛名的Sierpinski墊圈). 本章討論了用OpeoGL 繪制基本元素(如折線和多邊形)的方法和如何在程序中交互地使用鼠標和鍵盤。最后的實例分析會給一些有趣的編段題目。它們能讓學生對如何編寫圖形程序有更加清晰的感覺。其中的一個典型實例分析是建立一個用子初始化OpenGL和打開一個OpenGL繪制窗口的類。教學重點1.如何在程序中交互地使用鼠標和鍵盤2.開發幾個完整曲線繪制程序教學難點如何在程序中交互地使用鼠標和鍵盤教學設計教學切入從C+基本概述入手,一步一步加深對C+的了解。拓展
24、內容教學內容§ 2.3 penGL中的直線繪制繪制線段glBegin(GL_LINES); / use constant GL_LINES here glVertex2i(40, 100); glVertex2i(202, 96);glEnd();或者編寫一個函數void drawLineInt(GLint x1, GLint y1, GLint x2, GLint y2)glBegin(GL_LINES);glVertex2i(x1, y1);glVertex2i(x2, y2);glEnd(); 2.3.1 繪制折線和多邊形折線就是一系列頭尾相連的線段的集合,也稱為線帶。glBe
25、gin(GL_LINE_STRIP); / draw an open polyline glVertex2i(20,10); glVertex2i(50,10); glVertex2i(20,80); glVertex2i(50,80);glEnd();glFlush();繪制多邊形,只需要用GL_LINE_LOOP替換GL_LINE_STRIP 即可,即是閉合的。f(x) = 300 - 100 cos(2p x/100) + 30 cos(4p x/100) + 6 cos(6p x/100)< Calculate constants A, B, C and D for scalin
26、g and shifting>glBegin(GL_LINE_STRIP);for(x = 0; x <= 300; x += 3)glVertex2d(A * x + B, C * f(x) + D);glEnd();glFlush;moveTo和lineTo函數實現為: GLintPoint CP; / 全局位置變量/<<<<<<<<<<<<< moveto >>>>>>>>>>>>>>void moveto(GLin
27、t x, GLint y)CP.x = x; CP.y = y; / 更新CP/<<<<<<<<<<<< lineTo >>>>>>>>>>>>>>>>>void lineto(GLint x, GLint y)glBegin(GL_LINES); / 繪制曲線glVertex2i(CP.x, CP.y);glVertex2i(x, y);glEnd();glFlush();CP.x = x; CP.y = y; / 更新
28、 CP § 2.4與鼠標和鍵盤的交互當用戶按下或釋放鼠標按鈕、移動鼠標或者松開或按下鍵盤時,就會產生一個相關事件。程序員可以用每類事件注冊一個回調函數 glutMouseFunc(myMouse) :利用按下或者鼠標按鈕時發生事件來注冊 myMouse() · glutMotionFunc(myMovedMouse) 利用鼠標移動注冊函數 myMovedMouse() glutKeyboardFunc(myKeyboard) 利用按下或者松開鍵盤按鍵時注冊函數 myKeyBoard() 2.4.1 用鼠標交互注冊一個函數到glutMouseFunc(myMouse),myM
29、ouse()的名字可以任意,有四個參數:void myMouse(int button, int state, int x, int y);button的值如下:GLUT_LEFT_BUTTON, GLUT_MIDDLE_BUTTON, 或 GLUT_RIGHT_BUTTON;而state的值可能為:GLUT_UP 或GLUT_DOWN。x和y為事件發生時鼠標的位置。 用鼠標繪制點當用戶每次按下鼠標時,就會在屏幕窗口上鼠標所在的位置繪制出一個點。由于鼠標位置的y值是距離屏幕頂端的像素值,故不在(x, y), 而是在 (x,screenHeight y)上繪制,其中screenHeight 為屏
30、幕的高度。void myMouse(int button, int state, int x, int y)if(button = GLUT_LEFT_BUTTON && state = GLUT_DOWN)drawDot(x, screenHeight -y);else if(button = GLUT_RIGHT_BUTTON && state = GLUT_DOWN)exit(-1); 2.4.2 用鼠標指定一個矩形想讓用戶畫尺寸大小由鼠標輸入的長方形。用戶在兩個點上單擊鼠標,指定邊校正矩形的兩個角點,就可以畫出矩形。用戶右鍵點擊鼠標即可清屏。/ 使用鼠標
31、指定一個矩形static GLintPoint corner2;static int numCorners = 0; / initial value is 0if(button = GLUT_LEFT_BUTTON && state = GLUT_DOWN)cornernumCorners.x = x;cornernumCorners.y = screenHeight - y; / flip y coordinatenumCorners+; / have another pointif(numCorners = 2)glRecti(corner0.x, corner0.y, c
32、orner1.x, corner1.y);numCorners = 0; / back to 0 cornerselse if(button = GLUT_RIGHT_BUTTON && state = GLUT_DOWN)glClear(GL_COLOR_BUFFER_BIT); / clear the windowglFlush();2.4.3 用鼠標控制Sierpinski墊片使用戶用鼠標指定初始三角形的三個頂點,并置于數組corners中,代碼為static GLintPoint corners3;static int numCorners = 0;if(button
33、= GLUT_LEFT_BUTTON && state = GLUT_DOWN)cornernumCorners.x = x;cornernumCorners.y = screenHeight - y; / flip y coordinateif(+numCorners = 3) Sierpinski(corners); / draw the gasketnumCorners = 0; / back to 0 corners 鼠標移動鼠標移動會產生一個鼠標事件:glutMotionFunc(myMovedMouse);注冊函數myMovedMouse(int x, int y)
34、;有兩個參數,即事件發生時鼠標所在的位置。glutPassiveMotionFunc(myPassiveMotion);這個函數是沒有按下鼠標按鈕的情況下,鼠標在窗口內移動時調用。該函數可以繪制并顯示橡皮矩形:隨著用戶移動鼠標,矩形將相應地變大或變小。下面的程序是用戶單擊鼠標建立矩形的一個角點,然后不按下鼠標時移動鼠標,調用myPassiveMotion(int x, int y),這決定了矩形的第二個角點。glutPostRedisplay()調用myDisplay()函數。 代碼見見計算機圖形學課件2016計算機圖形學(Opengl版第三版)書源代碼word版2.2.1-threeDots
35、.doc2.4.4 鍵盤交互按下鍵盤上的某個按鍵時就會產生一個鍵盤事件,并放入消息隊列。回調函數myKeyboard()通過glutKeyboardFunc(myKeyboard)來注冊這種事件,該函數的原型為:void myKeyboard(unsigned int key, int x, int y); key 值就是鍵的ASCII 值, x 和y為鼠標所在的位置。實例代碼為:void myKeyboard(unsigned char theKey, int mouseX, int mouseY)GLint x = mouseX;GLint y = screenHeight - mouse
36、Y; / 反轉y的值switch(theKey)case p:drawDot(x, y); / draw a dot at the mouse positionbreak;case GLUT_KEY_LEFT: List+last.x = x; / add a pointList last.y = y;break;case E:exit(-1); /terminate the programdefault:break; / do nothing教具使用PPT課件課后思考與習題復習第二章,預習第三章思考:2-12-17、2-21、2-22、 2-252-27上機題:2-19、2-20、2-28、
37、2-30、2-31、2-33實驗二課堂反饋隨堂記錄第4次課時間地點授課章節第3章 更多的繪圖工具§ 3.1介紹視口和裁剪 § 3.2開發選擇窗口和視口的方法,以達到最佳視覺效果§ 3.3描述參數定義的曲線,并理解它們的繪制技術§ 3.4創建世界坐標系中繪圖的工具授課方式課堂講授教學時數4注意事項教學目標 本章主要講解窗口到視口變換的主要思想,以及在顯示器上放圖片和確定圖片大小的方法。具體討論了以下內容:如何自我管理程序窗口和視口,而把細節留給OpenGL 處理的方法。編放、搖動鏡頭等有趣的效果和簡單的圖像動畫;復雜的基于多邊形的圖像、園和弧的繪制:二維扣
38、三維曲線的參數化表示方法。教學重點開發選擇窗口和視口的方法,以達到最佳視覺效果教學難點開發選擇窗口和視口的方法,以達到最佳視覺效果教學設計1. 簡單回顧上次課程的內容,復述上次課程結尾處內容,加深學生對上次課的印象,無縫過渡到本次課程。2. 通過對函數的定義,函數聲明語法規則逐步了解函數的結構類型。3. 編寫簡單函數實例,以實例引導學生掌握函數的聲明及調用。4. 接著講述各種函數調用形式。讓學生充分接受新知識。教學切入先通過講述函數的聲明和調用規則列舉實例,然后解構函數,從實例中學習函數的用法,以此為切入點講清OpenGL函數的使用,引導學生由點及面,舉一反三。拓展內容OpenGL函數的各種調
39、用方法教學內容§ 3.1概述屏幕坐標系:x方向從0到screenWidth-1,y方向從0到screenHeight-1,它是設備坐標系,有一個視口。世界坐標系:笛卡爾坐標系,邏輯坐標系。§ 3.2世界窗口和視口信號處理中非常重要的函數sinc,它的定義為:當x!=0,且sin(0)=1要繪制的曲線如圖,比如限定x在-4到4變化,使用 setWindow()來建立世界窗口,使用setViewport()來建立視口。通過設置一個世界窗口和一個視口,并建立它們之間的一個合適的映射,可以完成適當的縮放和平移。窗口是在世界坐標系,而視口是屏幕坐標系。繪制sinc的代碼見計算機圖形學
40、課件2016計算機圖形學(Opengl版第三版)書源代碼word版第三章代碼.doc設立窗口到視口的映射 OpenGL使得窗口到視口的變換很容易。OpenGL通過一系列變換完成所需要的映射,自動傳送到每個頂點,它還自動裁剪掉對象在世界窗口之外的部分。對于二維繪圖來說,世界窗口由函數gluOrtho2D( )設定,它的原型是:void gluOrtho2D(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top); 即左右下上 視口的設定通過glViewport()函數,它的原型是:void glViewport(GLint x,
41、 GLint y, GLint width, GLint height); 相當于設置左下角(x, y) 和右上角(x + width, y + height). 即左下角和寬高。我們用setWindow()函數設置窗口,用setViewport()函數設置視口;/- setWindow - 即窗口的左右下上void setWindow(float left, float right, float bottom, float top)glMatrixMode(GL_PROJECTION);glLoadIdentity();gluOrtho2D(left, right, bottom, top)
42、;/- setViewport -即視口的左右下上void setViewport(float left, float right, float bottom, float top)glViewport(left, bottom, right left, top - bottom);例子3.2.2 sinc函數回顧/- setWindow -void setWindow(GLfloat left, GLfloat right, GLfloat bottom, GLfloat top) glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluOrtho
43、2D(left, right, bottom, top);/- setViewport -void setViewport(GLint left, GLint right, GLint bottom, GLint top)/ define our own function to specify the viewport, as explained later glViewport(left, bottom, right - left, top - bottom);void myDisplay(void) / plot the sinc function, using world coordin
44、ates glClear( GL_COLOR_BUFFER_BIT ); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glBegin(GL_LINE_STRIP); for( GLfloat x = -4.0; x < 4.0; x += 0.1) / draw the plot glVertex2f(x, sin(pi * x) / (pi * x); glEnd(); glFlush();在main函數中調用如下: setWindow(-5.0, 5.0, -0.3, 1.0); setViewport(0, 640, 0, 480);
45、§ 3.3 裁剪線3.3.2 Cohen-Sutherland裁剪算法 沒有平凡接受或平凡拒絕時的截斷 Cohen-Sutherland算法使用一個分治的策略。如果線段不是被平凡接受和平凡拒絕,則它會被窗口的某一個邊界分成兩個部分。其中一個部分在窗口之外,這部分會被丟掉。另一部分有被看到的潛在可能性,因此整個過程將對四個窗口邊界的下一個重復進行,采用下面的策略: do 形成 p1,p2的碼字; if (平凡接受) return 1; if (平凡拒絕) return 0; 將線段在下一個窗口邊界處截斷;舍去在外面的部分; while(1); 這個算法最多四次循環就會終止。只保留線段在
46、先前窗口邊界測試中幸存的部分,只有四個這樣的邊界。如右圖,點P1的坐標需要重新計算。它的x坐標是W.right,即窗口的右邊界,它的y坐標需要用圖中d的值調整到P1.y得到。e =p1.x- W.right delx = p2.x - p1.x; dely = p2.y - p1.y;故可確定d,就可以得到新的P1.y: p1.y += (W.right - p1.x) * dely / delx 只有當線段平行邊界線時,delx才為0,而此時線段位于窗口之外,故這種情況在沒有平凡接受或平凡拒絕時的截斷出現。教具使用PPT課件課后思考與習題復習第三章 3-2, 3-8, 3-11課堂反饋隨堂記
47、錄第5次課時間地點授課章節第3章 更多的繪圖工具§ 3.3裁剪§ 3.4創建世界坐標系中繪圖的工具授課方式課堂講授教學時數4注意事項教學目標 本章主要講解窗口到視口變換的主要思想,以及在顯示器上放圖片和確定圖片大小的方法。具體討論了以下內容:如何自我管理程序窗口和視口,而把細節留給OpenGL 處理的方法。編放、搖動鏡頭等有趣的效果和簡單的圖像動畫;復雜的基于多邊形的圖像、園和弧的繪制:二維扣三維曲線的參數化表示方法。教學重點開發選擇窗口和視口的方法,以達到最佳視覺效果教學難點開發選擇窗口和視口的方法,以達到最佳視覺效果教學設計5. 簡單回顧上次課程的內容,復述上次課程結尾
48、處內容,加深學生對上次課的印象,無縫過渡到本次課程。6. 通過對函數的定義,函數聲明語法規則逐步了解函數的結構類型。7. 編寫簡單函數實例,以實例引導學生掌握函數的聲明及調用。8. 接著講述各種函數調用形式。讓學生充分接受新知識。教學切入先通過講述函數的聲明和調用規則列舉實例,然后解構函數,從實例中學習函數的用法,以此為切入點講清OpenGL函數的使用,引導學生由點及面,舉一反三。拓展內容OpenGL函數的各種調用方法教學內容§ 3.3 裁剪線3.3.3 開發Canvas類在世界坐標系工作是有意義的,基本形體裁剪和映射從世界窗口到視窗口。但是這種轉換需要適當地管理。有許多交互要素(點
49、,矩形,映射等),我們應當封裝它們并限制程序員訪問它們避免細小的錯誤。我們應當確保不同部分能適當地初始化。使用類。我們開發了一個Canvas類,它提供了一個方便的繪制畫布可以繪制線段,多邊形等。它提供了一個簡單的方法來創建需要的屏幕窗口,并創建一個世界窗口和視口,它確保世界窗口能較好地映射到視口。它也提供了moveTo()和LineTo()函數,許多程序員找到了合適的代碼,如“龜形”圖形。有許多方式來定義Canvas類:我們使用OpenGL,利用所有的OpenGL方法。但在案例3.4我們描述了一個完全不同的實現方法,我們提供了很多的工具。尤其是實現了Cohen Sutherland裁剪器。3.
50、3.4 一些有用的支持類在Canvas和其他類中提供一些共有的數據類型是方便的。我們定義了5個類。提供了構造函數和其他函數處理每一種類型的對象。一些類提供了繪制函數使得它容易繪制類的實例。一些方法在類聲明時就實現,其他的方法在練習中要求實現。類Point2: 一個實數坐標系的點類A class Point2public: Point2() x = y = 0.0f; / constructor1 Point2(float xx, float yy) x = xx; y = yy; / constructor2 void set(float xx, float yy) x = xx; y = yy; float getX() return x; float getY() return y; void draw(void) glBegin(GL_POINTS); / draw this point glVertex2f(Glfloat)x, (Glf
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025上海市合同法新規企業有權對員工罰款
- 2025合同變更與合同終止的區別
- 2025策略:深入剖析合同中排除不必要裝修項目的方法
- 2025電工設備購銷合同范本
- 2025年南昌住房出租合同
- 2025現代風格房屋租賃合同
- 2025【上海市勞動合同參考模板】上海市勞動合同條款
- 2025簡易合同保管協議
- 2025個體投資者股權投資合同范本
- 2025標準家庭裝修合同模板
- 實驗室安全自查表樣表
- 外賣食物中毒起訴書
- 《機械設計基礎》復習備考題庫(含答案)
- 安全生產責任書安全制度
- xk5036數控立式銑床總體及橫向進給傳動機構設計論文大學本科畢業論文
- 小學五六年級青春期女生健康心理講座PPT
- 基于模型預測控制的無人駕駛車輛軌跡跟蹤控制算法研究共3篇
- 空冷島空冷機組管束更換施工方案
- 2023年大學生數學競賽天津市試題參考及答案
- JJG 644-2003振動位移傳感器
- 藥品使用監督檢查記錄表
評論
0/150
提交評論