摘要:本文主要介紹了計(jì)算機(jī)圖形學(xué)輔助教學(xué)網(wǎng)站的開發(fā)過程,核心論述了三維圖形在Web環(huán)境下實(shí)時(shí)交互的實(shí)現(xiàn)。針對圖形學(xué)三維知識的教學(xué)難點(diǎn),為了實(shí)現(xiàn)Web環(huán)境下實(shí)時(shí)互動(dòng)的三維教學(xué)演示,本課題采用了Java的Applet嵌入網(wǎng)頁中,同時(shí)通過JOGL(Java Bindings for OpenGL)來實(shí)現(xiàn)Applet中的三維圖形的繪制,并通過數(shù)字簽名技術(shù)繞過Applet的安全機(jī)制,來達(dá)到可交互的目的。
關(guān)鍵詞:教學(xué)網(wǎng)站;三維圖形;JOGL;Applet
中圖分類號:TP391.41 文獻(xiàn)標(biāo)識碼:A 文章編號:1007-9599 (2012) 17-0000-02
1 前言
1.1 課題的目的及意義
《計(jì)算機(jī)圖形學(xué)》是計(jì)算機(jī)學(xué)科中比較抽象,難懂的一門專業(yè)基礎(chǔ)課。按照普通的教學(xué)模式,學(xué)生不易接受。如能結(jié)合《計(jì)算機(jī)圖形學(xué)》輔助教學(xué)網(wǎng)站來教學(xué),使用動(dòng)畫和演示程序則能生動(dòng)、直觀地揭示計(jì)算機(jī)圖形學(xué)算法的精髓和本質(zhì),由于實(shí)現(xiàn)了算法的可視化,使學(xué)生的理論思維與形象思維有機(jī)的統(tǒng)一起來,有利于提高教學(xué)效果。
2 相關(guān)技術(shù)簡介
Web環(huán)境下的三維圖形交互技術(shù)是本課題的難點(diǎn),本課題通過對以下相關(guān)技術(shù)的研究和使用克服了這一難點(diǎn)。主要包括Java中Applet以及JOGL技術(shù),JOGL即是Java的OpenGL綁定。
在面向?qū)ο蟮恼Z言中,Java是一種真正的面向?qū)ο蟮木幊陶Z言。為了在Java中使用OpenGL,出現(xiàn)了許多新的想通過友好的Java API來使用OpenGL的嘗試,如Java 3D,OpenGL for Java Technology等,其中有一種稱為Java對于OpenGL的綁定的技術(shù),得到了Sun公司和SGI公司的支持,是目前的一種比較令人滿意的在Java中使用OpenGL的技術(shù)[1]。
3 網(wǎng)站建設(shè)總體設(shè)計(jì)
3.1 網(wǎng)站制作流程與總體規(guī)劃
網(wǎng)站的制作流程如下:
第一步:網(wǎng)站定位。
第二步:依據(jù)需求分析對網(wǎng)站結(jié)構(gòu)進(jìn)行總體規(guī)劃。
第三步:劃分各功能模塊。
第四步:制定網(wǎng)站建設(shè)規(guī)則和標(biāo)準(zhǔn)。
第五步:選擇開發(fā)需要的軟硬件環(huán)境。
第六步:構(gòu)建網(wǎng)站。
第七步:網(wǎng)站的測試。
第八步:網(wǎng)站的發(fā)布與維護(hù)管理。
由于本課題的重點(diǎn)是WEB下三維圖形的交互,因此建站環(huán)節(jié)不做詳解
4 網(wǎng)站詳細(xì)設(shè)計(jì)
本章重點(diǎn)介紹教學(xué)演示模塊的詳細(xì)設(shè)計(jì)。
根據(jù)需求分析和概要設(shè)計(jì),當(dāng)點(diǎn)擊演示子目錄時(shí),顯示內(nèi)容分別如圖4-1、4-2所示。其中,圖4-2為演示子目錄中的鼠標(biāo)交互結(jié)果圖。
在介紹各個(gè)演示的算法實(shí)現(xiàn)前,首先介紹一下三維圖形的顯示流程。如圖4-3所示。
基于三維圖形顯示原理圖,我們設(shè)計(jì)出本模塊的六個(gè)演示(幾何變換、投影變換、光照、材質(zhì)、紋理、霧化)及算法。首先要實(shí)現(xiàn)演示的主程序框架,即JOGL下的特殊的Applet框架。同時(shí)該演示運(yùn)行界面主要包括三個(gè)窗口:世界坐標(biāo)系窗口、屏幕坐標(biāo)系窗口、命令行窗口。因此,我們需要分別實(shí)現(xiàn)這三個(gè)窗口,然后通過主框架的調(diào)用,完成演示的實(shí)現(xiàn)。
4.1 主程序的框架實(shí)現(xiàn):
(1)Java下的Applet框架
Applet框架的主要功能是創(chuàng)建一個(gè)顯示窗口,并整體控制程序的生命周期,同時(shí)負(fù)責(zé)調(diào)用三個(gè)子窗口的監(jiān)聽器,主要分為四個(gè)部分:
①init( )方法:初始化程序,主要完成一些Applet構(gòu)造方法不能完成的工作。
②start( )方法:啟動(dòng)程序,初始化后,重入等都將自動(dòng)調(diào)用。
③stop( )方法:停止程序,用于停止消耗系統(tǒng)資源。
④destroy( )方法:銷毀程序,瀏覽器關(guān)閉時(shí)自動(dòng)調(diào)用,以清除所用資源。
(2)JOGL下的Applet框架
JOGL中的Applet框架與Java下的Applet框架相同,包括上面四個(gè)部分,但是在各部分中需要添加自己的實(shí)現(xiàn)代碼。
4.2 命令行窗口
該窗口功能的實(shí)現(xiàn)主要通過定義一個(gè)監(jiān)聽器類CommandWindow來完成。
該部分主要顯示該演示所需的關(guān)鍵代碼及隨時(shí)更新其中可變的坐標(biāo)參數(shù)。
4.3 屏幕坐標(biāo)系窗口
該窗口功能的實(shí)現(xiàn)主要通過定義一個(gè)監(jiān)聽器類ScreenWindow來完成。
該部分主要顯示繪制出來的三維物體模型,同時(shí)還包含兩種用戶交互。
4.4 世界坐標(biāo)系窗口
該窗口功能的實(shí)現(xiàn)主要通過定義一個(gè)監(jiān)聽器類WorldWindow來完成。
該部分主要顯示視點(diǎn),世界坐標(biāo)系,視景體,以及在世界坐標(biāo)系下看到的三維物體模型。
上邊詳細(xì)講述了演示中三個(gè)窗口的相應(yīng)處理,下面我們以幾何變換為例來詳細(xì)介紹演示的實(shí)現(xiàn)過程。
該演示的類名稱為TransformationApplet,其主框架實(shí)現(xiàn)同上。
各窗口的主要處理如下:
(1)命令行窗口
本窗口中除了前面提到的數(shù)據(jù)結(jié)構(gòu),還要用到的數(shù)據(jù)結(jié)構(gòu)為:
①定義視點(diǎn)
public static float eye[] = { 0.0f, 0.0f, 2.0f };//定義視點(diǎn)的位置
public static float at[] = { 0.0f, 0.0f, 0.0f };//定義物體的位置
public static float up[] = { 0.0f, 1.0f, 0.0f };//定義向上的向量
②定義矩陣
projection:投影矩陣,公有靜態(tài)數(shù)組;
modelview:幾何矩陣,公有靜態(tài)數(shù)組;
inverse:轉(zhuǎn)置矩陣,公有靜態(tài)數(shù)組;
③定義標(biāo)志性變量
public static boolean swapped = 1;//判斷是否交換平移和旋轉(zhuǎn)的位置
(2)屏幕坐標(biāo)系窗口
該窗口繼承前邊提到的全部監(jiān)視器。
數(shù)據(jù)結(jié)構(gòu):
public static boolean flag = 1;//判斷是否在該窗口進(jìn)行交互控制
基本函數(shù):public void Judge(float update,int selection)
功能:更新變量值。
(3)世界坐標(biāo)系窗口
該窗口繼承前邊提到的事件監(jiān)視器。
數(shù)據(jù)結(jié)構(gòu):
public static boolean flag = 1;//判斷是否在該窗口進(jìn)行交互控制
本窗口的繪制以及用戶交互的實(shí)現(xiàn)過程為:
在事件監(jiān)聽器中,窗口重繪操作的處理不同。窗口繪制操作的CommandDisplay()函數(shù)代碼有所不同。
上面主要介紹幾何變換演示的主要實(shí)現(xiàn)過程,其它的演示的實(shí)現(xiàn)過程類似,只是具體代碼有些不同,本文不再詳述。
5 小結(jié)
本章重點(diǎn)介紹了教學(xué)演示中的演示的實(shí)現(xiàn)過程,至此,完成了本網(wǎng)站的建設(shè)。
參考文獻(xiàn):
[1]Andrew Davison.Pro Java 6 3D Game Development: Java 3D, JOGL, JInput and JOAL API.Apress,2007.