計(jì)算機(jī)圖形學(xué)OpenGL(第三版)教案_第1頁
計(jì)算機(jī)圖形學(xué)OpenGL(第三版)教案_第2頁
計(jì)算機(jī)圖形學(xué)OpenGL(第三版)教案_第3頁
計(jì)算機(jī)圖形學(xué)OpenGL(第三版)教案_第4頁
計(jì)算機(jī)圖形學(xué)OpenGL(第三版)教案_第5頁
已閱讀5頁,還剩72頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、計(jì)算機(jī)圖形學(xué)教案2 2016年3月22日目錄1. 個(gè)人授課守則2. 課程概貌3. 課程教學(xué)總體目標(biāo)與要求4. 課程教學(xué)方式總體設(shè)計(jì)5. 課程板書總體設(shè)計(jì)6. 主頁面板書設(shè)計(jì)7. 課程教學(xué)進(jìn)度安排8. 課時(shí)備課教案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. 課程綜合性實(shí)驗(yàn)設(shè)計(jì)10. 英語參考詞11. 平時(shí)考勤與成績(jī)記載匯總表本科課程:計(jì)算機(jī)圖形學(xué)武漢理工大學(xué) 陸濟(jì)湘 2015計(jì)算機(jī)圖形學(xué)教案陸濟(jì)湘 2015年12月 第三版1 個(gè)人授

2、課守則為人師表 身體力行 做陽光下純凈的代表,做黑夜中引路的燭光,布局平凡,杜絕市儈,求真求新,坦然一生。 不求大富大貴,大紅大紫,惟求平安康健,無愧我心。授業(yè)傳道 教書育人 給學(xué)生一方無污的凈土,一片創(chuàng)意的天空,一座智慧的樹林,一泓真理的泉水,一把求知的鑰匙。 不但授人以魚,更應(yīng)授人以漁,還應(yīng)授人以海。答疑解惑 恪盡職守 課堂知識(shí)講解力求做到復(fù)雜問題簡(jiǎn)單化,抽象問題形象化,枯燥問題生動(dòng)化,切實(shí)幫助學(xué)生理解課程知識(shí)。 力爭(zhēng)深入淺出,決不故弄玄虛以示深?yuàn)W。2 課程概貌課程名稱計(jì)算機(jī)圖形學(xué)課程學(xué)時(shí)48課程學(xué)分課程類型專業(yè)選修課授課方式課堂講授+實(shí)驗(yàn)考核方式閉卷考試授課專業(yè)數(shù)學(xué)jd1301,信計(jì)13

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

4、圖形學(xué)理論知識(shí)的同時(shí),向讀者條理清晰地說明怎樣用OpenGL命令來實(shí)現(xiàn)計(jì)算機(jī)圖形的基本要素。這種互為補(bǔ)充的安排能使讀者更容易理解相應(yīng)的理論和編程。在介紹計(jì)算機(jī)圖形學(xué)理論時(shí),本書著重于實(shí)踐性強(qiáng)、實(shí)用性廣的理論,讓讀者能夠在理解理論知識(shí)的同時(shí)用OpenGL編寫實(shí)用的應(yīng)用程序,而不是讓讀者去實(shí)現(xiàn)諸如OpenGL一類的底層圖形庫,這是有別于其他計(jì)算機(jī)圖形學(xué)教程的特點(diǎn)之一。因此,本書采用理論與實(shí)踐相結(jié)合的方式講解計(jì)算機(jī)圖形學(xué)理論和OpenGL圖形編程實(shí)踐,通過將二者有機(jī)地融合在一起,使讀者既掌握了計(jì)算機(jī)圖形學(xué)理論知識(shí),又掌握了編程實(shí)踐理論的方法。這也是本書的一個(gè)重要目標(biāo):使讀者在OpenGL編程時(shí)不再感

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

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

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

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

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

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

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

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

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

14、 本次課為首次課,對(duì)強(qiáng)化學(xué)生的課程學(xué)習(xí)興趣與學(xué)習(xí)信心十分關(guān)鍵,應(yīng)交待清楚本課程特點(diǎn)、教綱、考核方式、課堂要求、實(shí)驗(yàn)、教學(xué)資源等課堂教學(xué)概況,以認(rèn)識(shí)幾個(gè)新學(xué)生的溫和點(diǎn)名方式過渡,引導(dǎo)學(xué)生走進(jìn)課程。2. 從現(xiàn)實(shí)生活出發(fā),充分讓學(xué)生了解面向?qū)ο蟮乃枷搿?. 補(bǔ)充計(jì)算機(jī)圖形學(xué)基本概念和背景知識(shí),以實(shí)例計(jì)算機(jī)圖形學(xué)研究?jī)?nèi)容和研究方法,并以此為切入點(diǎn)導(dǎo)出程序開發(fā)流程。4. 結(jié)合工程實(shí)際,采用典型案例說明當(dāng)前開發(fā)模式的設(shè)計(jì)思路和應(yīng)用側(cè)重點(diǎn)不同所衍生的不同開發(fā)模式,啟發(fā)學(xué)生多方位思維,激發(fā)創(chuàng)新意識(shí)。5. 詳講計(jì)算機(jī)圖形學(xué)基本概念、特點(diǎn)以及相關(guān)內(nèi)容。教學(xué)切入從計(jì)算機(jī)程序設(shè)計(jì)語言的發(fā)展以及面向?qū)ο蠓椒ㄈ胧郑瑤椭鷮W(xué)

15、生認(rèn)識(shí)和理解面向?qū)ο蟮乃枷搿M卣箖?nèi)容1. 計(jì)算機(jī)圖形學(xué)基本概念2. 計(jì)算機(jī)圖形學(xué)背景3. 計(jì)算機(jī)圖形學(xué)開發(fā)實(shí)例教學(xué)內(nèi)容教具使用PPT課件課堂練習(xí)課后思考與習(xí)題課堂反饋隨堂記錄第2次課時(shí)間地點(diǎn)授課章節(jié)第二章vc opengl 編程指導(dǎo)例子§ 2.1編寫圖形程序 § 2.2學(xué)習(xí)OpenGL程序的基本組成授課方式課堂講授教學(xué)時(shí)數(shù)6注意事項(xiàng)教學(xué)目標(biāo) 本章讓學(xué)生開始編寫圖形程序,包括用OpenGL編程和開發(fā)幾個(gè)完整曲線繪制程序(包括矛名的Sierpinski墊圈). 本章討論了用OpeoGL 繪制基本元素(如折線和多邊形)的方法和如何在程序中交互地使用鼠標(biāo)和鍵盤。最后的實(shí)例分析會(huì)給一

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

17、就能理解每個(gè)新概念。每個(gè)圖形程序都以一些初始化工作為開始,由此建立程序所需要的顯示模型和坐標(biāo)系。 下面是使用GLUT庫,名為myMouse的回調(diào)函數(shù)例子,它方便地注冊(cè)了與鼠標(biāo)關(guān)聯(lián)的事件:glutMouseFunc(myMouse);glutMouseFunc是GLUT庫的固有函數(shù),但是回調(diào)函數(shù)myMouse是程序員定義的,并由程序員編寫代碼,處理每個(gè)可能感興趣的鼠標(biāo)動(dòng)作。 4種主要的OpenGL庫:1)基本GL庫,OpenGL庫的基礎(chǔ)。它提供OpenGL的基本函數(shù)。每個(gè)OpenGL函數(shù)都以字符GL開頭。2)GLUT庫:GL實(shí)用工具包。它用來打開窗口,開發(fā)和管理菜單,以及管理事件等。3)GLU庫

18、:GL實(shí)用庫,它提供高級(jí)例程,處理矩陣操作和繪制二次曲面如球和圓柱體;4)GLUI庫:用戶接口庫,提供控制工具和菜單。glutDisplayFunc(myDisplay):重繪窗口調(diào)用myDisplay回調(diào)函數(shù);glutReshapeFun(myReshape):對(duì)屏幕窗口的形狀進(jìn)行調(diào)整;void main()glutDisplayFunc(myDisplay); / 注冊(cè)重繪函數(shù)glutReshapeFunc(myReshape); / 注冊(cè)改變窗口形狀函數(shù)glutMouseFunc(myMouse); / 注冊(cè)鼠標(biāo)動(dòng)作函數(shù)glutMotionFunc(myMouse); / 注冊(cè)鼠標(biāo)移動(dòng)函

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

20、"my first attempt"); / 打開屏幕窗口/ 注冊(cè)回調(diào)函數(shù)glutDisplayFunc(myDisplay);glutReshapeFunc(myReshape);glutMouseFunc(myMouse);glutKeyboardFunc(myKeyboard);myInit(); / 必要的其他初始化工作glutMainLoop(); / 進(jìn)入循環(huán)§ 2.2OpenGL的基本圖形元素繪制三個(gè)點(diǎn):glBegin(GL_POINTS);glVertex2i(100, 50);glVertex2i(100, 130);glVertex2i(150

21、, 130);glEnd();或者用浮點(diǎn)值代替整數(shù)值: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); / 畫初始點(diǎn)for(int i = 0; i < 1000; i+) /畫1000點(diǎn)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課件課堂練習(xí)課后思考與習(xí)題復(fù)習(xí)第二章,預(yù)習(xí)第三章思考:2-12-17、2-21、2-22、 2-252-27上機(jī)題:2-19、2-20、2-28、2-30、2-31、2-33實(shí)驗(yàn)二課堂反饋隨堂記錄第3次課時(shí)間地點(diǎn)授課章節(jié)第二章vc opengl 編程指導(dǎo)例子§ 2.3開發(fā)繪制點(diǎn)、直線、折線和多邊形的基本圖形工具§ 2.4學(xué)會(huì)用鼠標(biāo)和鍵盤控制程序授課方式課堂講

23、授教學(xué)時(shí)數(shù)6注意事項(xiàng)教學(xué)目標(biāo) 本章讓學(xué)生開始編寫圖形程序,包括用OpenGL編程和開發(fā)幾個(gè)完整曲線繪制程序(包括矛名的Sierpinski墊圈). 本章討論了用OpeoGL 繪制基本元素(如折線和多邊形)的方法和如何在程序中交互地使用鼠標(biāo)和鍵盤。最后的實(shí)例分析會(huì)給一些有趣的編段題目。它們能讓學(xué)生對(duì)如何編寫圖形程序有更加清晰的感覺。其中的一個(gè)典型實(shí)例分析是建立一個(gè)用子初始化OpenGL和打開一個(gè)OpenGL繪制窗口的類。教學(xué)重點(diǎn)1.如何在程序中交互地使用鼠標(biāo)和鍵盤2.開發(fā)幾個(gè)完整曲線繪制程序教學(xué)難點(diǎn)如何在程序中交互地使用鼠標(biāo)和鍵盤教學(xué)設(shè)計(jì)教學(xué)切入從C+基本概述入手,一步一步加深對(duì)C+的了解。拓展

24、內(nèi)容教學(xué)內(nèi)容§ 2.3 penGL中的直線繪制繪制線段glBegin(GL_LINES); / use constant GL_LINES here glVertex2i(40, 100); glVertex2i(202, 96);glEnd();或者編寫一個(gè)函數(shù)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函數(shù)實(shí)現(xiàn)為: 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與鼠標(biāo)和鍵盤的交互當(dāng)用戶按下或釋放鼠標(biāo)按鈕、移動(dòng)鼠標(biāo)或者松開或按下鍵盤時(shí),就會(huì)產(chǎn)生一個(gè)相關(guān)事件。程序員可以用每類事件注冊(cè)一個(gè)回調(diào)函數(shù) glutMouseFunc(myMouse) :利用按下或者鼠標(biāo)按鈕時(shí)發(fā)生事件來注冊(cè) myMouse() · glutMotionFunc(myMovedMouse) 利用鼠標(biāo)移動(dòng)注冊(cè)函數(shù) myMovedMouse() glutKeyboardFunc(myKeyboard) 利用按下或者松開鍵盤按鍵時(shí)注冊(cè)函數(shù) myKeyBoard() 2.4.1 用鼠標(biāo)交互注冊(cè)一個(gè)函數(shù)到glutMouseFunc(myMouse),myM

29、ouse()的名字可以任意,有四個(gè)參數(shù):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為事件發(fā)生時(shí)鼠標(biāo)的位置。 用鼠標(biāo)繪制點(diǎn)當(dāng)用戶每次按下鼠標(biāo)時(shí),就會(huì)在屏幕窗口上鼠標(biāo)所在的位置繪制出一個(gè)點(diǎn)。由于鼠標(biāo)位置的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 用鼠標(biāo)指定一個(gè)矩形想讓用戶畫尺寸大小由鼠標(biāo)輸入的長(zhǎng)方形。用戶在兩個(gè)點(diǎn)上單擊鼠標(biāo),指定邊校正矩形的兩個(gè)角點(diǎn),就可以畫出矩形。用戶右鍵點(diǎn)擊鼠標(biāo)即可清屏。/ 使用鼠標(biāo)

31、指定一個(gè)矩形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 用鼠標(biāo)控制Sierpinski墊片使用戶用鼠標(biāo)指定初始三角形的三個(gè)頂點(diǎn),并置于數(shù)組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 鼠標(biāo)移動(dòng)鼠標(biāo)移動(dòng)會(huì)產(chǎn)生一個(gè)鼠標(biāo)事件:glutMotionFunc(myMovedMouse);注冊(cè)函數(shù)myMovedMouse(int x, int y)

34、;有兩個(gè)參數(shù),即事件發(fā)生時(shí)鼠標(biāo)所在的位置。glutPassiveMotionFunc(myPassiveMotion);這個(gè)函數(shù)是沒有按下鼠標(biāo)按鈕的情況下,鼠標(biāo)在窗口內(nèi)移動(dòng)時(shí)調(diào)用。該函數(shù)可以繪制并顯示橡皮矩形:隨著用戶移動(dòng)鼠標(biāo),矩形將相應(yīng)地變大或變小。下面的程序是用戶單擊鼠標(biāo)建立矩形的一個(gè)角點(diǎn),然后不按下鼠標(biāo)時(shí)移動(dòng)鼠標(biāo),調(diào)用myPassiveMotion(int x, int y),這決定了矩形的第二個(gè)角點(diǎn)。glutPostRedisplay()調(diào)用myDisplay()函數(shù)。 代碼見見計(jì)算機(jī)圖形學(xué)課件2016計(jì)算機(jī)圖形學(xué)(Opengl版第三版)書源代碼word版2.2.1-threeDots

35、.doc2.4.4 鍵盤交互按下鍵盤上的某個(gè)按鍵時(shí)就會(huì)產(chǎn)生一個(gè)鍵盤事件,并放入消息隊(duì)列。回調(diào)函數(shù)myKeyboard()通過glutKeyboardFunc(myKeyboard)來注冊(cè)這種事件,該函數(shù)的原型為:void myKeyboard(unsigned int key, int x, int y); key 值就是鍵的ASCII 值, x 和y為鼠標(biāo)所在的位置。實(shí)例代碼為:void myKeyboard(unsigned char theKey, int mouseX, int mouseY)GLint x = mouseX;GLint y = screenHeight - mouse

36、Y; / 反轉(zhuǎn)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課件課后思考與習(xí)題復(fù)習(xí)第二章,預(yù)習(xí)第三章思考:2-12-17、2-21、2-22、 2-252-27上機(jī)題:2-19、2-20、2-28、

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

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

39、用方法教學(xué)內(nèi)容§ 3.1概述屏幕坐標(biāo)系:x方向從0到screenWidth-1,y方向從0到screenHeight-1,它是設(shè)備坐標(biāo)系,有一個(gè)視口。世界坐標(biāo)系:笛卡爾坐標(biāo)系,邏輯坐標(biāo)系。§ 3.2世界窗口和視口信號(hào)處理中非常重要的函數(shù)sinc,它的定義為:當(dāng)x!=0,且sin(0)=1要繪制的曲線如圖,比如限定x在-4到4變化,使用 setWindow()來建立世界窗口,使用setViewport()來建立視口。通過設(shè)置一個(gè)世界窗口和一個(gè)視口,并建立它們之間的一個(gè)合適的映射,可以完成適當(dāng)?shù)目s放和平移。窗口是在世界坐標(biāo)系,而視口是屏幕坐標(biāo)系。繪制sinc的代碼見計(jì)算機(jī)圖形學(xué)

40、課件2016計(jì)算機(jī)圖形學(xué)(Opengl版第三版)書源代碼word版第三章代碼.doc設(shè)立窗口到視口的映射 OpenGL使得窗口到視口的變換很容易。OpenGL通過一系列變換完成所需要的映射,自動(dòng)傳送到每個(gè)頂點(diǎn),它還自動(dòng)裁剪掉對(duì)象在世界窗口之外的部分。對(duì)于二維繪圖來說,世界窗口由函數(shù)gluOrtho2D( )設(shè)定,它的原型是:void gluOrtho2D(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top); 即左右下上 視口的設(shè)定通過glViewport()函數(shù),它的原型是:void glViewport(GLint x,

41、 GLint y, GLint width, GLint height); 相當(dāng)于設(shè)置左下角(x, y) 和右上角(x + width, y + height). 即左下角和寬高。我們用setWindow()函數(shù)設(shè)置窗口,用setViewport()函數(shù)設(shè)置視口;/- 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函數(shù)回顧/- 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函數(shù)中調(diào)用如下: setWindow(-5.0, 5.0, -0.3, 1.0); setViewport(0, 640, 0, 480);

45、§ 3.3 裁剪線3.3.2 Cohen-Sutherland裁剪算法 沒有平凡接受或平凡拒絕時(shí)的截?cái)?Cohen-Sutherland算法使用一個(gè)分治的策略。如果線段不是被平凡接受和平凡拒絕,則它會(huì)被窗口的某一個(gè)邊界分成兩個(gè)部分。其中一個(gè)部分在窗口之外,這部分會(huì)被丟掉。另一部分有被看到的潛在可能性,因此整個(gè)過程將對(duì)四個(gè)窗口邊界的下一個(gè)重復(fù)進(jìn)行,采用下面的策略: do 形成 p1,p2的碼字; if (平凡接受) return 1; if (平凡拒絕) return 0; 將線段在下一個(gè)窗口邊界處截?cái)啵簧崛ピ谕饷娴牟糠郑?while(1); 這個(gè)算法最多四次循環(huán)就會(huì)終止。只保留線段在

46、先前窗口邊界測(cè)試中幸存的部分,只有四個(gè)這樣的邊界。如右圖,點(diǎn)P1的坐標(biāo)需要重新計(jì)算。它的x坐標(biāo)是W.right,即窗口的右邊界,它的y坐標(biāo)需要用圖中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 只有當(dāng)線段平行邊界線時(shí),delx才為0,而此時(shí)線段位于窗口之外,故這種情況在沒有平凡接受或平凡拒絕時(shí)的截?cái)喑霈F(xiàn)。教具使用PPT課件課后思考與習(xí)題復(fù)習(xí)第三章 3-2, 3-8, 3-11課堂反饋隨堂記

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

48、處內(nèi)容,加深學(xué)生對(duì)上次課的印象,無縫過渡到本次課程。6. 通過對(duì)函數(shù)的定義,函數(shù)聲明語法規(guī)則逐步了解函數(shù)的結(jié)構(gòu)類型。7. 編寫簡(jiǎn)單函數(shù)實(shí)例,以實(shí)例引導(dǎo)學(xué)生掌握函數(shù)的聲明及調(diào)用。8. 接著講述各種函數(shù)調(diào)用形式。讓學(xué)生充分接受新知識(shí)。教學(xué)切入先通過講述函數(shù)的聲明和調(diào)用規(guī)則列舉實(shí)例,然后解構(gòu)函數(shù),從實(shí)例中學(xué)習(xí)函數(shù)的用法,以此為切入點(diǎn)講清OpenGL函數(shù)的使用,引導(dǎo)學(xué)生由點(diǎn)及面,舉一反三。拓展內(nèi)容OpenGL函數(shù)的各種調(diào)用方法教學(xué)內(nèi)容§ 3.3 裁剪線3.3.3 開發(fā)Canvas類在世界坐標(biāo)系工作是有意義的,基本形體裁剪和映射從世界窗口到視窗口。但是這種轉(zhuǎn)換需要適當(dāng)?shù)毓芾怼S性S多交互要素(點(diǎn)

49、,矩形,映射等),我們應(yīng)當(dāng)封裝它們并限制程序員訪問它們避免細(xì)小的錯(cuò)誤。我們應(yīng)當(dāng)確保不同部分能適當(dāng)?shù)爻跏蓟J褂妙悺N覀冮_發(fā)了一個(gè)Canvas類,它提供了一個(gè)方便的繪制畫布可以繪制線段,多邊形等。它提供了一個(gè)簡(jiǎn)單的方法來創(chuàng)建需要的屏幕窗口,并創(chuàng)建一個(gè)世界窗口和視口,它確保世界窗口能較好地映射到視口。它也提供了moveTo()和LineTo()函數(shù),許多程序員找到了合適的代碼,如“龜形”圖形。有許多方式來定義Canvas類:我們使用OpenGL,利用所有的OpenGL方法。但在案例3.4我們描述了一個(gè)完全不同的實(shí)現(xiàn)方法,我們提供了很多的工具。尤其是實(shí)現(xiàn)了Cohen Sutherland裁剪器。3.

50、3.4 一些有用的支持類在Canvas和其他類中提供一些共有的數(shù)據(jù)類型是方便的。我們定義了5個(gè)類。提供了構(gòu)造函數(shù)和其他函數(shù)處理每一種類型的對(duì)象。一些類提供了繪制函數(shù)使得它容易繪制類的實(shí)例。一些方法在類聲明時(shí)就實(shí)現(xiàn),其他的方法在練習(xí)中要求實(shí)現(xiàn)。類Point2: 一個(gè)實(shí)數(shù)坐標(biāo)系的點(diǎn)類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等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論