侯冬曼, 陳武喝, 馬佳洪
(華南理工大學 物理與光電學院, 廣州 510641)
隨著計算機技術的發展,多媒體技術在教學中發揮著越來越重要的作用[1-2],不再局限于作為PPT演示[3]、動畫展示,虛擬實驗室[4-6]應運而生。目前虛擬仿真技術多種多樣,各有優勢、競相發展,常用的有flash[7-8]、Java[9]等。近幾年,隨著3D顯示技術的進步,虛擬仿真向著3D顯示的方向發展,VRML[10]、Java3D[11]、開放式圖形庫(Open Graphics Library,OpenGL)[12]等虛擬仿真技術得到了廣泛應用。
分光計[13]是基礎物理實驗教學的常用儀器,它的基本結構是許多光學儀器的基礎,既能夠培養學生的基本實驗技能,又能培養學生應用理論知識解決實際問題的能力。邁克爾遜干涉儀[14-15]設計巧妙,測量極其精密,是近代許多干涉儀的基礎。光的干涉和衍射現象提示了光的波動性,而單縫衍射[16]是衍射現象中最基本也是最典型的例子。研究衍射現象及其規律,在理論上和實踐上都有重要意義。光的偏振直接有力地證明光是橫波,偏振現象已廣泛應用于科研和生產實際中,對偏振光的觀察和分析,能有效加深對光偏振基本規律的理解[13]。
然而這些實驗操作步驟繁雜,或操作的現象只能操作者一人看到,或儀器多雜難辨,不便于實驗講解。因此,在編程軟件Visual C++框架下,采用OpenGL編程制作了虛擬三維模型,拓展了實驗教學方式,開辟了一條探索物理類虛擬仿真實驗項目的新途徑。
OpenGL是一個跨編程語言、跨平臺的專業的圖形程序接口,是高性能三維圖形編程和交互式視景處理標準,包括核心函數庫、實用函數庫、輔助函數庫等,有250個函數。這些函數具有以下8個方面功能:幾何建模、幾何變換、顏色設置、光照和材質設置、紋理映射、位圖顯示和圖像增強、雙緩存以及交互選擇。通過幾何建模和幾何變換可以構建復雜的三維場景;通過顏色設置、光照和材質設置、紋理映射、位圖顯示和圖像增強可以模擬接近真實世界的視覺效果;通過幾何變換、雙緩存可以實現實時、流暢的動畫效果;通過交互選擇可以實現交互操作。
OpenGL只是一個圖形接口,需要在一定的開發環境中使用,采用編程環境是Visual C++。C++是一門面向對象的語言,具有語言簡練、靈活高效、易于移植的特點。Visual C++提供了MFC類庫,擴展了C++類層次結構,使開發Windows應用程序更加方便;一般性的界面由Visual C++自己生成,用戶只需要添加自己要實現的功能。
OpenGL的繪圖方式和Windows的繪圖方式是不同的,Windows采用的是圖形設備接口(Graphic Device Interface,GDI)繪圖,而OpenGL采用的是渲染描述表(Rendering Context,RC)繪圖,而且使用特殊像素格式。因此,在Visual C++環境下開發OpenGL應用程序必須為OpenGL創建渲染描述表并設置適合OpenGL的像素格式。
基于OpenGL,本文構建了分光計、邁克爾遜干涉、光的衍射和偏振等三維模型,和實物儀器一樣,各個部件可以通過鼠標操作,操作結果及實驗現象實時顯示,可以進行相應的虛擬測量,結果符合物理規律。
虛擬儀器不但模型和實物儀器一致,而且各個部件跟實物儀器一樣可調。在建模時,已經將實現調節的幾何變換函數(如glTranslatef、glRotatef)的參數設置為變量,通過調節這些變量,就可以實現儀器的調節。
以分光計為例,要實現平行光管的調節,將鼠標移動到其調節橫向(或縱向)調節螺絲上,通過滾動鼠標滾輪,可以改變橫向(或縱向)傾斜度變量的數值,程序會實時重新繪制模型,顯示調節效果,其部分代碼如下:
void CRenderView::Lightpipe(GLenum RenderMode)
{
glPushMatrix ();
…
//平行光管同軸旋轉
glTranslatef (0.0, 0.0, 48.0);
glRotatef (m_Rlightpipe4, 0.0, 1.0, 0.0);
glTranslatef (0.0, 0.0, -48.0);
//平行光管傾度旋轉
glTranslatef (0.0, 48.5, 26.0);
glRotatef (m_Rlightpipe3, 1.0, 0.0, 0.0);
glTranslatef (0.0, -48.5, -26.0);
//平行光管
glPushMatrix ();
glPushMatrix ();
…
//平行光管
glTranslatef (0.0, 0.0, -30.0);
glTranslatef (1.5, 6.5, 3.0);
DrawPipe(m_pqobj, 3.0, 4.0, 4.0, 35.0);
//平行光管透鏡
glTranslatef (0.0, 0.0, -35.1);
DrawPipe(m_pqobj, 2.9, 4.1, 4.1, 3.0);
…
glPopMatrix ();
…
glPopMatrix ();
…
glPopMatrix ();
}
程序界面除了虛擬儀器模型,一般還包括菜單欄、工具欄、狀態欄和觀察視場4個部分,分光計和邁克爾遜實驗儀器增加了刻度盤讀數。以分光計為例進行講解,虛擬分光計模型如圖1所示。菜單欄及其下拉菜單可實現程序的所有操作、設置;工具欄為本程序的常規操作,如取放平面鏡、棱鏡、光柵等;狀態欄顯示當下的操作說明。儀器模型可以從不同角度觀察并調節,目鏡視場實時顯示分光計目鏡中看到的視場,游標盤讀數可直接從界面上讀出。

圖1 虛擬分光計程序界面
虛擬實驗儀器操作非常簡單,實驗操作約定:將鼠標移動到可操作部件上,調節滾輪就可以對該部件進行調節(包括儀器的開啟和關閉)。鼠標點擊空白位置,調節滾輪即對整個虛擬實驗儀器進行左右旋轉操作。按住鼠標左鍵拖動,即對整個實驗裝置進行旋轉操作。
利用OpenGL構建了動態可調的三維模型,同時采用Windows的GDI畫圖模擬實驗的現象。可實現的功能包括但不僅僅包括分光計的調節、折射、衍射實驗,邁克爾遜干涉,單縫衍射和偏振光等。實驗現象會根據儀器的調節實時顯示,基本實現物理實驗教學中的所有功能。
2.3.1 分光計
在虛擬分光計上可以進行目鏡調節、望遠鏡調節、平行光管調節以及各半調節等。以各半調節為例進行講解。
各半調節:放上平面鏡,找到綠十字;開始時,綠十字一般不在水平準線的位置[見圖2(a)]。經各半調節后,不管平行鏡的哪一面正對望遠鏡筒,綠十字都在上水平準線的高度[見圖2(b)]。

(a)

(b)
三棱鏡折射實驗。三棱鏡折射現象是根據折射公式實時計算的,折射條紋的偏轉角度會根據三棱鏡位置的調節而改變,因此可以在虛擬分光計上運用最小偏向角法測棱鏡折射率,如圖3所示。
光柵衍射實驗。衍射現象也是根據衍射公式實時計算的,衍射條紋的偏轉角度會根據光柵位置的調節而改變,也可以利用最小偏向角法或者垂直光柵法進行相關的測量,如圖4所示。

圖3 三棱鏡折射實驗

圖4 光柵衍射實驗
2.3.2 邁克爾遜干涉儀
邁克爾遜干涉儀結構復雜,主要由光源、分光板、補償板、反光鏡、調節拉桿螺絲、大轉輪和微調轉輪等部分構成,如圖5所示。光源包括鈉光、氦氖激光和白光,可模擬等傾干涉條紋、等厚干射條紋等。

圖5 邁克爾遜干涉儀外觀
等傾干涉條紋的調整。調節反射鏡M2背后的傾斜度調節螺絲,使出現干涉條紋[見圖6(a)]。然后通過反復調節水平、垂直拉桿螺絲,把等厚干涉條紋調節成等傾干涉條紋,如圖6(b)所示。最后,為了獲得稀疏等傾干涉條紋,需要調節大轉輪、微調轉輪使干涉條件變稀疏,如圖6(c)所示。
白光等厚干涉條紋的調整。將光源換成白光,調節水平(垂直)拉桿螺絲,使等傾干涉條紋變成弧形,如圖7(a)所示。然后調節反射鏡M1的位置,使干涉條紋變成直線形的等厚干涉條紋,如圖7(b)所示。

(a)

(b)

(c)

(a)

(b)
2.3.3 虛擬單縫衍射實驗
虛擬單縫衍射實驗較為簡單,可模擬菲涅爾衍射實驗及測量其光強分布。通過調節狹縫上方的旋鈕B使狹縫大小合適,在顯示板上觀察到菲涅爾衍射現象,如圖8所示。再選擇工具中的“測量”即可對光強分布進行測量。

圖8 菲涅爾衍射實驗程序界面
2.3.4 偏振光模擬實驗
偏振光模擬實驗界面簡單,操作便捷,可模擬線偏振光、圓偏振光以及橢圓偏振光的實驗現象和操作。圖9為圓偏振光的實驗現象,并顯示出了波形。

圖9 圓偏振光實驗
在Visual C++框架下,基于OpenGL設計了虛擬分光計、邁克爾遜干涉儀、單縫衍射和光的偏振等儀器的三維模型,模擬了儀器的各種操作和調節步驟,實時顯示虛擬操作的實驗現象和測量結果,基本可滿足物理實驗教學中的所有功能。這些三維模型可以作為實驗課件用于實驗講解,也可以作為預習或者復習工具提供給學生,以提高學生的學習興趣和學習熱情。
實踐證明:OpenGL是虛擬仿真儀器制作的有力工具,既可以模擬相對復雜的分光計,也可以用于制作其它物理類虛擬儀器;虛擬儀器對物理實驗教學有很大的促進作用,而且有助于緩解高校實驗資源短缺和日益緊張的空間資源。一言以蔽之,虛擬仿真儀器應該進行推廣,以推進實驗教學改革,提高教學質量和效率。
當然,虛擬分光計還存在一些不足,比如儀器的界面還不夠逼真,無法網絡應用。下一步工作還需不斷改進加強,制作更多更好的虛擬物理實驗儀器。