計算機圖形學OpenGL(第三版)教案_第1頁
計算機圖形學OpenGL(第三版)教案_第2頁
計算機圖形學OpenGL(第三版)教案_第3頁
計算機圖形學OpenGL(第三版)教案_第4頁
計算機圖形學OpenGL(第三版)教案_第5頁
已閱讀5頁,還剩54頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

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年12月 第三版1 個人授課守則為人師表 身體力行 做陽光下純凈的代表,做黑夜

2、中引路的燭光,布局平凡,杜絕市儈,求真求新,坦然一生。 不求大富大貴,大紅大紫,惟求平安康健,無愧我心。授業(yè)傳道 教書育人 給學生一方無污的凈土,一片創(chuàng)意的天空,一座智慧的樹林,一泓真理的泉水,一把求知的鑰匙。 不但授人以魚,更應授人以漁,還應授人以海。答疑解惑 恪盡職守 課堂知識講解力求做到復雜問題簡單化,抽象問題形象化,枯燥問題生動化,切實幫助學生理解課程知識。 力爭深入淺出,決不故弄玄虛以示深奧。2 課程概貌課程名稱計算機圖形學課程學時48課程學分課程類型專業(yè)選修課授課方式課堂講授+實驗考核方式閉卷考試授課專業(yè)數(shù)學jd1301,信計1301-02授課班級授課教師陸濟湘學時分配講課40學時

3、上機輔導8學時起止周數(shù)1-10周學生班長課程教材計算機圖形學(OpenGL)第三版教材主編出版單位清華大學出版社課堂講授章節(jié)第一章 計算機圖形學概述第二章OpenGL繪制入門第三章 繪圖工具第四章 向量工具第五章 物體變換第六章 網(wǎng)格建模第七章 三維觀察第八章 幾何體真實感渲染第九章 光柵顯示工具第十章 曲線和曲面設計第十一章 顏色理論第十二章 光線跟蹤自學或在課程設計講述章節(jié)課程重點章節(jié)課程難點章節(jié)主要參考書目3 課程教學總體目標與要求3.1 課程教學總體目標本書以兩條主線貫穿其中,一條是向讀者介紹基本的計算機圖形學理論知識,另一條是在介紹圖形學理論知識的同時,向讀者條理清晰地說明怎樣用Op

4、enGL命令來實現(xiàn)計算機圖形的基本要素。這種互為補充的安排能使讀者更容易理解相應的理論和編程。在介紹計算機圖形學理論時,本書著重于實踐性強、實用性廣的理論,讓讀者能夠在理解理論知識的同時用OpenGL編寫實用的應用程序,而不是讓讀者去實現(xiàn)諸如OpenGL一類的底層圖形庫,這是有別于其他計算機圖形學教程的特點之一。因此,本書采用理論與實踐相結合的方式講解計算機圖形學理論和OpenGL圖形編程實踐,通過將二者有機地融合在一起,使讀者既掌握了計算機圖形學理論知識,又掌握了編程實踐理論的方法。這也是本書的一個重要目標:使讀者在OpenGL編程時不再感到“孤立”,相互融合講解的計算機圖形學理論和Open

5、GL編程方法一起指導讀者編寫出更強大、更有效的應用程序。3.2 課程教學要求本書所講內(nèi)容是進行計算機圖形學應用編程(如游戲編程等) 的基礎,實用性強而又容易理解,它們都是經(jīng)過精心選擇的。書中包括大量的OpenGL編程示例和效果圖,所選實例具有很強的代表性,程序代碼全部采用C語言編寫,并且全部在Visual C+6.0環(huán)境下調(diào)試通過,便于讀者對計算機圖形學理論和OpenGL編程概念的理解。本書只要求讀者有一定的C語言基礎和數(shù)學知識,適合作為相關專業(yè)計算機圖形學的教材或輔助教材,還可以作為OpenGL編程以及計算機游戲編程等培訓班的理想教材,對那些對OpenGL編程和計算機圖形學感興趣的讀者來說是

6、一本不可多得的詳盡的參考用書。4 課程教學方式總體設計4.1課程教學改革重點 通過全面分析課程教學內(nèi)容,針對本課程涉及面廣,實踐性強的主要特點,結合當前學生實踐環(huán)節(jié)薄弱、概念不強等教學難點,應將教學改革重點放在豐富教學方式上。4.2 首次課注意點 首次課對強化學生的課程學習興趣與學習信心十分關鍵,需交待清楚課程特點、教綱、考核方式、課堂要求、實驗等教學概況,用溫和平穩(wěn)的過度方式引導學生走進課堂。4.3 設計教學切入點 找準各章節(jié)教學切入點,隨堂結合各章節(jié)講述內(nèi)容中存在瓶頸問題和突破方向,補充教學內(nèi)容,選擇恰當?shù)慕虒W手段實現(xiàn)教材與課堂講授間的無縫鏈接,促進學生主動學習。4.4 課堂教學方式設計4

7、.4.1 啟發(fā)式教學為主,實例式教學為輔。 力求生動講述,做到復雜問題簡單化,抽象問題形象化,枯燥問題生動化,深入淺出,不故弄玄虛以示深奧。結合工程實例,采用討論方式將有關概念以有趣的提問引出,調(diào)動學生思維積極性,營造活躍互動的課堂氛圍,提高學生的學習興趣與學習信心。4.4.2主次分明,詳略得當。 重點與難點章節(jié)只是點輔以多種教學手段詳講、講透;次重點章節(jié)知識點講清楚;一般內(nèi)容章節(jié)教學重心為引導學生讀懂教材相關知識點。4.4.3語言生動、力求講授個性化。 采用PowerPoint2007上課,注意以講為主,切忌將講課變成“念課”。講授時力求語言生動,用詞得當。4.5 課件設計原則4.5.1原創(chuàng)

8、性原則 應根據(jù)開課任務不同的學時分配和不同的學生類型及特點,針對性設計課件,并隨教學過程出項的問題反饋及時修改課件,加之本課程可選課件資源幾乎為零,故本課程課件必須原創(chuàng)。4.5.2系統(tǒng)性原則 課件應完整放映課程講授體系,體現(xiàn)面向?qū)ο笳Z言基本理論和相關概念應有的嚴謹性和系統(tǒng)性,突出和統(tǒng)一正在講授的章節(jié)標識,保留每節(jié)內(nèi)容2級以上標題,便于學生筆記。4.5.3 類板書原則 課件應按傳統(tǒng)黑板板書方式設計,姑且稱為“電子黑板”。頁面上切不可堆砌大量文字段落,僅豐富圖片、繪圖等傳統(tǒng)黑板不好表達的多媒體信息即可。4.5.4 動畫性原則 課件文字按最接近手寫的方式動畫,繪圖過程、分段制造過程等內(nèi)容按步驟動畫解

9、決傳統(tǒng)教學中繪圖、建造工藝過程表述抽象、學生難以理解等教學瓶頸問題,幫助學生較好的理解講授內(nèi)容。4.5.5美觀性原則 精心設計,力求美觀與實用完美結合。課件整體風格統(tǒng)一,制作精美,從細節(jié)上體現(xiàn)講授者的嚴謹學風,潛移默化的言傳身教。4.6 課程資源建設 原創(chuàng)設計課程學習網(wǎng)站,設立電子黑板、全程教學錄像等豐富的網(wǎng)絡教學資源,有效幫助學生拓展學習空間,便于課后復習鞏固。 5 課程板書總體設計5.1設計課程導航頁首頁設課程導航頁,總覽全課程內(nèi)容。5.2設計章首頁 每章設一開始頁面,明確本章內(nèi)容。5.3設計節(jié)首頁每節(jié)設一開始頁面,明確本節(jié)內(nèi)容。5.4主頁面分區(qū)設計主頁面分標題、側邊、主內(nèi)容三區(qū)。5.5設

10、計節(jié)內(nèi)容每節(jié)設具體實例頁面,加深本節(jié)印象。5.6設計章末頁每章設一結束頁面,布置學生任務6 主頁面板書設計6.1主頁面分區(qū) 頁面主要分為章節(jié)標題區(qū)、主內(nèi)容區(qū)、側邊前內(nèi)容目錄區(qū)三大部分。6.2頁面布局 主頁面內(nèi)圖片文字等布局勻稱。6.3頁面背景 全課程頁面背景一致,避免雜亂。統(tǒng)一選用深藍色背景,以反突出文字和圖片等前端內(nèi)容。6.4側邊目錄區(qū)側邊前述內(nèi)容目錄區(qū)記錄本頁前面所述節(jié)的一、二、三級標題,以方便學生溫習或補課堂筆記。6.5頁面主文字色彩及大小文字色彩明亮,大小適中,風格統(tǒng)一。章節(jié)標題金黃色,黑體,36號字;一級標題白色,黑體,24號字;二級標題及正文白色,黑體,字號視頁面布局在選擇2024

11、號字間選擇,不宜再小,以方便后排學生筆記。6.6關鍵詞和英文單詞用與主文字不同的顏色標明關鍵詞和英文單詞。7 課程教學進程安排教學周一二三四五六七八九十十一十二十三學時數(shù)4444444646466進程線道圖第一章第四章第七章第二章第八章第三章第五章第六章第十一章圖例一般章節(jié)重點章節(jié)次重點章節(jié)科 目計算機圖形學總學時講課實踐專業(yè)班數(shù)學jd1301,信計1301-0248408周次課次授課內(nèi)容學時實驗、習題、大作業(yè)內(nèi)容學時一計算機圖形學概述 21、vc6.0安裝,建立控制臺工程,OpenGL庫配置,運行簡單OpenGL程序2一計算機圖形學控制臺應用程序創(chuàng)建,OpenGL庫配置,簡單程序講解2二三O

12、penGL繪圖入門,窗口編程和窗口繪圖,OpenGL基本圖形元素函數(shù)4三四OpenGL中的直線繪制,OpenGL與鼠標和鍵盤的交互,繪制Sierpinski墊片,繪制函數(shù)曲線42、繪制Sierpinski墊片,繪制函數(shù)曲線和參數(shù)曲線2五六世界窗口和視口,裁剪線算法,正多邊形、圓和圓弧的繪制,參數(shù)曲線的繪制6七八圖形學中的向量工具,點積,叉積,重要幾何對象的表示,求兩個線段的交點,直線和平面求交及裁剪,多邊形求交問題6九十物體幾何變換初步,三維仿射變換,坐標系變換63 繪制邏輯圖和混沌的模擬,實現(xiàn)Cohen-Sutherland裁剪算法2十一十二在程序中使用仿射變換,使用OpenGL繪制三維場景

13、6十三多邊形實體網(wǎng)格建模,多面體和拉伸形體44 利用三維仿射變換繪制三維場景28 課時備課教案第1次課時間地點授課章節(jié)第1章 緒論§ 1.1什么是計算機圖形學 § 1.2計算機圖形學的應用§ 1.3計算機生成圖像的方法 § 1.4常用的圖形顯示設備§ 1.5交互設備授課方式課堂講授教學時數(shù)4注意事項教學目標使學生了解課程特點、教綱、考核方式、課堂要求、實驗等教學概況,初步理解和掌握計算機圖形學發(fā)展進程以及注意事項。教學重點1. 計算機生成圖像的方法2. 計算機圖形學開發(fā)過程教學難點教學設計1. 本次課為首次課,對強化學生的課程學習興趣與學習信心

14、十分關鍵,應交待清楚本課程特點、教綱、考核方式、課堂要求、實驗、教學資源等課堂教學概況,以認識幾個新學生的溫和點名方式過渡,引導學生走進課程。2. 從現(xiàn)實生活出發(fā),充分讓學生了解面向?qū)ο蟮乃枷搿?. 補充計算機圖形學基本概念和背景知識,以實例計算機圖形學研究內(nèi)容和研究方法,并以此為切入點導出程序開發(fā)流程。4. 結合工程實際,采用典型案例說明當前開發(fā)模式的設計思路和應用側重點不同所衍生的不同開發(fā)模式,啟發(fā)學生多方位思維,激發(fā)創(chuàng)新意識。5. 詳講計算機圖形學基本概念、特點以及相關內(nèi)容。教學切入從計算機程序設計語言的發(fā)展以及面向?qū)ο蠓椒ㄈ胧?,幫助學生認識和理解面向?qū)ο蟮乃枷?。拓展?nèi)容1. 計算機圖形

15、學基本概念2. 計算機圖形學背景3. 計算機圖形學開發(fā)實例教學內(nèi)容教具使用PPT課件課堂練習課后思考與習題課堂反饋隨堂記錄第2次課時間地點授課章節(jié)第二章vc opengl 編程指導例子§ 2.1編寫圖形程序 § 2.2學習OpenGL程序的基本組成授課方式課堂講授教學時數(shù)6注意事項教學目標 本章讓學生開始編寫圖形程序,包括用OpenGL編程和開發(fā)幾個完整曲線繪制程序(包括矛名的Sierpinski墊圈). 本章討論了用OpeoGL 繪制基本元素(如折線和多邊形)的方法和如何在程序中交互地使用鼠標和鍵盤。最后的實例分析會給一些有趣的編段題目。它們能讓學生對如何編寫圖形程序有更

16、加清晰的感覺。其中的一個典型實例分析是建立一個用子初始化OpenGL和打開一個OpenGL繪制窗口的類。教學重點1.如何在程序中交互地使用鼠標和鍵盤2.開發(fā)幾個完整曲線繪制程序教學難點如何在程序中交互地使用鼠標和鍵盤教學設計教學切入從C+基本概述入手,一步一步加深對C+的了解。拓展內(nèi)容教學內(nèi)容§ 2.1 生成圖像初步 通過練習(編寫和測試各種不同圖形的程序)可以很快掌握計算機圖形學。先從簡單的任務開始,一旦掌握,就試著變變花樣,看看有哪些變化,試著進一步繪制更復雜的場景。最好的學習辦法是認真、仔細地學習每行代碼或等式。當你這么做時,就能理解每個新概念。每個圖形程序都以一些初始化工作為

17、開始,由此建立程序所需要的顯示模型和坐標系。 下面是使用GLUT庫,名為myMouse的回調(diào)函數(shù)例子,它方便地注冊了與鼠標關聯(lián)的事件:glutMouseFunc(myMouse);glutMouseFunc是GLUT庫的固有函數(shù),但是回調(diào)函數(shù)myMouse是程序員定義的,并由程序員編寫代碼,處理每個可能感興趣的鼠標動作。 4種主要的OpenGL庫:1)基本GL庫,OpenGL庫的基礎。它提供OpenGL的基本函數(shù)。每個OpenGL函數(shù)都以字符GL開頭。2)GLUT庫:GL實用工具包。它用來打開窗口,開發(fā)和管理菜單,以及管理事件等。3)GLU庫:GL實用庫,它提供高級例程,處理矩陣操作和繪制二次

18、曲面如球和圓柱體;4)GLUI庫:用戶接口庫,提供控制工具和菜單。glutDisplayFunc(myDisplay):重繪窗口調(diào)用myDisplay回調(diào)函數(shù);glutReshapeFun(myReshape):對屏幕窗口的形狀進行調(diào)整;void main()glutDisplayFunc(myDisplay); / 注冊重繪函數(shù)glutReshapeFunc(myReshape); / 注冊改變窗口形狀函數(shù)glutMouseFunc(myMouse); / 注冊鼠標動作函數(shù)glutMotionFunc(myMouse); / 注冊鼠標移動函數(shù)glutKeyboardFunc(myKeyboa

19、rd); / 注冊鍵盤動作函數(shù)/可能初始化其他工作glutMainLoop(); / 進入主循環(huán)等待事件發(fā)生void main(int argc, char* argv)glutInit(&argc, argv); / 初始化工具包glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB); / 設置顯示模式glutInitWindowSize(640,480); / 設置窗口大小glutInitWindowPosition(100, 150); / 設置窗口在屏幕上的位置glutCreateWindow("my first attempt&quo

20、t;); / 打開屏幕窗口/ 注冊回調(diào)函數(shù)glutDisplayFunc(myDisplay);glutReshapeFunc(myReshape);glutMouseFunc(myMouse);glutKeyboardFunc(myKeyboard);myInit(); / 必要的其他初始化工作glutMainLoop(); / 進入循環(huán)§ 2.2OpenGL的基本圖形元素繪制三個點:glBegin(GL_POINTS);glVertex2i(100, 50);glVertex2i(100, 130);glVertex2i(150, 130);glEnd();或者用浮點值代替整數(shù)值

21、: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循環(huán)外面GLintPoint point = Tindex; / 初始值drawDot(point.x, point.y); / 畫初始點for(int i = 0; i < 1000; i+) /畫1000點index = rand()%3;/P(k)=(P(k-1)+T)/2point.x = (point.x

22、 + 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次課時間地點授課章節(jié)第二章vc opengl 編程指導例子§ 2.3開發(fā)繪制點、直線、折線和多邊形的基本圖形工具§ 2.4學會用鼠標和鍵盤控制程序授課方式課堂講授教學時數(shù)6注意事項教學目標 本章讓學生開始編寫圖形

23、程序,包括用OpenGL編程和開發(fā)幾個完整曲線繪制程序(包括矛名的Sierpinski墊圈). 本章討論了用OpeoGL 繪制基本元素(如折線和多邊形)的方法和如何在程序中交互地使用鼠標和鍵盤。最后的實例分析會給一些有趣的編段題目。它們能讓學生對如何編寫圖形程序有更加清晰的感覺。其中的一個典型實例分析是建立一個用子初始化OpenGL和打開一個OpenGL繪制窗口的類。教學重點1.如何在程序中交互地使用鼠標和鍵盤2.開發(fā)幾個完整曲線繪制程序教學難點如何在程序中交互地使用鼠標和鍵盤教學設計教學切入從C+基本概述入手,一步一步加深對C+的了解。拓展內(nèi)容教學內(nèi)容§ 2.3 penGL中的直線

24、繪制繪制線段glBegin(GL_LINES); / use constant GL_LINES here glVertex2i(40, 100); glVertex2i(202, 96);glEnd();或者編寫一個函數(shù)void drawLineInt(GLint x1, GLint y1, GLint x2, GLint y2)glBegin(GL_LINES);glVertex2i(x1, y1);glVertex2i(x2, y2);glEnd(); 2.3.1 繪制折線和多邊形折線就是一系列頭尾相連的線段的集合,也稱為線帶。glBegin(GL_LINE_STRIP); / draw

25、 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 scaling and shifting>glBegin(

26、GL_LINE_STRIP);for(x = 0; x <= 300; x += 3)glVertex2d(A * x + B, C * f(x) + D);glEnd();glFlush;moveTo和lineTo函數(shù)實現(xiàn)為: GLintPoint CP; / 全局位置變量/<<<<<<<<<<<<< moveto >>>>>>>>>>>>>>void moveto(GLint x, GLint y)CP.x = x; CP.

27、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; / 更新 CP § 2.4與鼠標和鍵盤的交互當用戶

28、按下或釋放鼠標按鈕、移動鼠標或者松開或按下鍵盤時,就會產(chǎn)生一個相關事件。程序員可以用每類事件注冊一個回調(diào)函數(shù) glutMouseFunc(myMouse) :利用按下或者鼠標按鈕時發(fā)生事件來注冊 myMouse() · glutMotionFunc(myMovedMouse) 利用鼠標移動注冊函數(shù) myMovedMouse() glutKeyboardFunc(myKeyboard) 利用按下或者松開鍵盤按鍵時注冊函數(shù) myKeyBoard() 2.4.1 用鼠標交互注冊一個函數(shù)到glutMouseFunc(myMouse),myMouse()的名字可以任意,有四個參數(shù):void m

29、yMouse(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為事件發(fā)生時鼠標的位置。 用鼠標繪制點當用戶每次按下鼠標時,就會在屏幕窗口上鼠標所在的位置繪制出一個點。由于鼠標位置的y值是距離屏幕頂端的像素值,故不在(x, y), 而是在 (x,screenHeight y)上繪制,其中screenHeight 為屏幕的高度。void myMouse(int butt

30、on, 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 用鼠標指定一個矩形想讓用戶畫尺寸大小由鼠標輸入的長方形。用戶在兩個點上單擊鼠標,指定邊校正矩形的兩個角點,就可以畫出矩形。用戶右鍵點擊鼠標即可清屏。/ 使用鼠標指定一個矩形static GLintPoint co

31、rner2;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, corner1.x, corner1.y);numCo

32、rners = 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墊片使用戶用鼠標指定初始三角形的三個頂點,并置于數(shù)組corners中,代碼為static GLintPoint corners3;static int numCorners = 0;if(button = GLUT_LEFT_BUTTON &&a

33、mp; 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 鼠標移動鼠標移動會產(chǎn)生一個鼠標事件:glutMotionFunc(myMovedMouse);注冊函數(shù)myMovedMouse(int x, int y);有兩個參數(shù),即事件發(fā)生時鼠標所在的位置。glutP

34、assiveMotionFunc(myPassiveMotion);這個函數(shù)是沒有按下鼠標按鈕的情況下,鼠標在窗口內(nèi)移動時調(diào)用。該函數(shù)可以繪制并顯示橡皮矩形:隨著用戶移動鼠標,矩形將相應地變大或變小。下面的程序是用戶單擊鼠標建立矩形的一個角點,然后不按下鼠標時移動鼠標,調(diào)用myPassiveMotion(int x, int y),這決定了矩形的第二個角點。glutPostRedisplay()調(diào)用myDisplay()函數(shù)。 代碼見見計算機圖形學課件2016計算機圖形學(Opengl版第三版)書源代碼word版2.2.1-threeDots.doc2.4.4 鍵盤交互按下鍵盤上的某個按鍵時就

35、會產(chǎn)生一個鍵盤事件,并放入消息隊列。回調(diào)函數(shù)myKeyboard()通過glutKeyboardFunc(myKeyboard)來注冊這種事件,該函數(shù)的原型為: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 - mouseY; / 反轉(zhuǎn)y的值switch(theKey)ca

36、se 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、2-30、2-31、2-33實驗二課堂反饋隨堂記錄第

37、4次課時間地點授課章節(jié)第3章 更多的繪圖工具§ 3.1介紹視口和裁剪 § 3.2開發(fā)選擇窗口和視口的方法,以達到最佳視覺效果§ 3.3描述參數(shù)定義的曲線,并理解它們的繪制技術§ 3.4創(chuàng)建世界坐標系中繪圖的工具授課方式課堂講授教學時數(shù)4注意事項教學目標 本章主要講解窗口到視口變換的主要思想,以及在顯示器上放圖片和確定圖片大小的方法。具體討論了以下內(nèi)容:如何自我管理程序窗口和視口,而把細節(jié)留給OpenGL 處理的方法。編放、搖動鏡頭等有趣的效果和簡單的圖像動畫;復雜的基于多邊形的圖像、園和弧的繪制:二維扣三維曲線的參數(shù)化表示方法。教學重點開發(fā)選擇窗口和視口

38、的方法,以達到最佳視覺效果教學難點開發(fā)選擇窗口和視口的方法,以達到最佳視覺效果教學設計1. 簡單回顧上次課程的內(nèi)容,復述上次課程結尾處內(nèi)容,加深學生對上次課的印象,無縫過渡到本次課程。2. 通過對函數(shù)的定義,函數(shù)聲明語法規(guī)則逐步了解函數(shù)的結構類型。3. 編寫簡單函數(shù)實例,以實例引導學生掌握函數(shù)的聲明及調(diào)用。4. 接著講述各種函數(shù)調(diào)用形式。讓學生充分接受新知識。教學切入先通過講述函數(shù)的聲明和調(diào)用規(guī)則列舉實例,然后解構函數(shù),從實例中學習函數(shù)的用法,以此為切入點講清OpenGL函數(shù)的使用,引導學生由點及面,舉一反三。拓展內(nèi)容OpenGL函數(shù)的各種調(diào)用方法教學內(nèi)容§ 3.1概述屏幕坐標系:x

39、方向從0到screenWidth-1,y方向從0到screenHeight-1,它是設備坐標系,有一個視口。世界坐標系:笛卡爾坐標系,邏輯坐標系。§ 3.2世界窗口和視口信號處理中非常重要的函數(shù)sinc,它的定義為:當x!=0,且sin(0)=1要繪制的曲線如圖,比如限定x在-4到4變化,使用 setWindow()來建立世界窗口,使用setViewport()來建立視口。通過設置一個世界窗口和一個視口,并建立它們之間的一個合適的映射,可以完成適當?shù)目s放和平移。窗口是在世界坐標系,而視口是屏幕坐標系。繪制sinc的代碼見計算機圖形學課件2016計算機圖形學(Opengl版第三版)書源

40、代碼word版第三章代碼.doc設立窗口到視口的映射 OpenGL使得窗口到視口的變換很容易。OpenGL通過一系列變換完成所需要的映射,自動傳送到每個頂點,它還自動裁剪掉對象在世界窗口之外的部分。對于二維繪圖來說,世界窗口由函數(shù)gluOrtho2D( )設定,它的原型是:void gluOrtho2D(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top); 即左右下上 視口的設定通過glViewport()函數(shù),它的原型是:void glViewport(GLint x, GLint y, GLint width, GLi

41、nt height); 相當于設置左下角(x, y) 和右上角(x + width, y + height). 即左下角和寬高。我們用setWindow()函數(shù)設置窗口,用setViewport()函數(shù)設置視口;/- setWindow - 即窗口的左右下上void setWindow(float left, float right, float bottom, float top)glMatrixMode(GL_PROJECTION);glLoadIdentity();gluOrtho2D(left, right, bottom, top);/- setViewport -即視口的左右下上v

42、oid setViewport(float left, float right, float bottom, float top)glViewport(left, bottom, right left, top - bottom);例子3.2.2 sinc函數(shù)回顧/- setWindow -void setWindow(GLfloat left, GLfloat right, GLfloat bottom, GLfloat top) glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluOrtho2D(left, right, bottom, to

43、p);/- 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 coordinates glClear( GL_COLOR_BUF

44、FER_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函數(shù)中調(diào)用如下: setWindow(-5.0, 5.0, -0.3, 1.0); setViewport(0, 640, 0, 480);§ 3.3 裁剪線3.3.2 Cohen-

45、Sutherland裁剪算法 沒有平凡接受或平凡拒絕時的截斷 Cohen-Sutherland算法使用一個分治的策略。如果線段不是被平凡接受和平凡拒絕,則它會被窗口的某一個邊界分成兩個部分。其中一個部分在窗口之外,這部分會被丟掉。另一部分有被看到的潛在可能性,因此整個過程將對四個窗口邊界的下一個重復進行,采用下面的策略: do 形成 p1,p2的碼字; if (平凡接受) return 1; if (平凡拒絕) return 0; 將線段在下一個窗口邊界處截斷;舍去在外面的部分; while(1); 這個算法最多四次循環(huán)就會終止。只保留線段在先前窗口邊界測試中幸存的部分,只有四個這樣的邊界。如

46、右圖,點P1的坐標需要重新計算。它的x坐標是W.right,即窗口的右邊界,它的y坐標需要用圖中d的值調(diào)整到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,而此時線段位于窗口之外,故這種情況在沒有平凡接受或平凡拒絕時的截斷出現(xiàn)。教具使用PPT課件課后思考與習題復習第三章 3-2, 3-8, 3-11課堂反饋隨堂記錄第5次課時間地點授課章節(jié)第3章 更多的繪圖工具&#

47、167; 3.3裁剪§ 3.4創(chuàng)建世界坐標系中繪圖的工具授課方式課堂講授教學時數(shù)4注意事項教學目標 本章主要講解窗口到視口變換的主要思想,以及在顯示器上放圖片和確定圖片大小的方法。具體討論了以下內(nèi)容:如何自我管理程序窗口和視口,而把細節(jié)留給OpenGL 處理的方法。編放、搖動鏡頭等有趣的效果和簡單的圖像動畫;復雜的基于多邊形的圖像、園和弧的繪制:二維扣三維曲線的參數(shù)化表示方法。教學重點開發(fā)選擇窗口和視口的方法,以達到最佳視覺效果教學難點開發(fā)選擇窗口和視口的方法,以達到最佳視覺效果教學設計5. 簡單回顧上次課程的內(nèi)容,復述上次課程結尾處內(nèi)容,加深學生對上次課的印象,無縫過渡到本次課程。

48、6. 通過對函數(shù)的定義,函數(shù)聲明語法規(guī)則逐步了解函數(shù)的結構類型。7. 編寫簡單函數(shù)實例,以實例引導學生掌握函數(shù)的聲明及調(diào)用。8. 接著講述各種函數(shù)調(diào)用形式。讓學生充分接受新知識。教學切入先通過講述函數(shù)的聲明和調(diào)用規(guī)則列舉實例,然后解構函數(shù),從實例中學習函數(shù)的用法,以此為切入點講清OpenGL函數(shù)的使用,引導學生由點及面,舉一反三。拓展內(nèi)容OpenGL函數(shù)的各種調(diào)用方法教學內(nèi)容§ 3.3 裁剪線3.3.3 開發(fā)Canvas類在世界坐標系工作是有意義的,基本形體裁剪和映射從世界窗口到視窗口。但是這種轉(zhuǎn)換需要適當?shù)毓芾?。有許多交互要素(點,矩形,映射等),我們應當封裝它們并限制程序員訪問它

49、們避免細小的錯誤。我們應當確保不同部分能適當?shù)爻跏蓟?。使用類。我們開發(fā)了一個Canvas類,它提供了一個方便的繪制畫布可以繪制線段,多邊形等。它提供了一個簡單的方法來創(chuàng)建需要的屏幕窗口,并創(chuàng)建一個世界窗口和視口,它確保世界窗口能較好地映射到視口。它也提供了moveTo()和LineTo()函數(shù),許多程序員找到了合適的代碼,如“龜形”圖形。有許多方式來定義Canvas類:我們使用OpenGL,利用所有的OpenGL方法。但在案例3.4我們描述了一個完全不同的實現(xiàn)方法,我們提供了很多的工具。尤其是實現(xiàn)了Cohen Sutherland裁剪器。3.3.4 一些有用的支持類在Canvas和其他類中提供

50、一些共有的數(shù)據(jù)類型是方便的。我們定義了5個類。提供了構造函數(shù)和其他函數(shù)處理每一種類型的對象。一些類提供了繪制函數(shù)使得它容易繪制類的實例。一些方法在類聲明時就實現(xiàn),其他的方法在練習中要求實現(xiàn)。類Point2: 一個實數(shù)坐標系的點類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, (Glfloat)y); glEnd();private: float x

溫馨提示

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

評論

0/150

提交評論