GLStudio ADI(地平儀)繪制示例教程[上]
ADI用于讓飛機(jī)的飛行員知道飛機(jī)的俯仰和滾轉(zhuǎn)狀態(tài)。此示例將包括一個(gè)三維球體可以設(shè)置為在現(xiàn)實(shí)世界中相對(duì)于重力浮動(dòng)。本教程還涵蓋一些基本的照明技術(shù),以及制作球體的材料的使用儀表看起來(lái)很逼真。最后,本教程介紹如何添加用戶定義的類(lèi)方法,以便您可以在工具中創(chuàng)建自己的行為。
1、繪制ADI目的
本文是指導(dǎo)用戶如何使用GLStudio的基本技術(shù)創(chuàng)建一個(gè)地平儀,主要包括:
創(chuàng)建GLStudio基本對(duì)象體
給對(duì)象體添加紋理
創(chuàng)建GlsLightSource對(duì)象
使用Gouraud著色
在一個(gè)場(chǎng)景中使用燈光
創(chuàng)建用戶定義的類(lèi)特性

2、設(shè)置工作區(qū)
首先,創(chuàng)建一個(gè)名為“_adi”的項(xiàng)目和工作區(qū)。在工作區(qū)目錄中,創(chuàng)建一個(gè)名為“textures”的文件夾,并從GL Studio教程文件夾中已完成的“_adi”項(xiàng)目中的“textures”文件夾中復(fù)制名為“adi.png”和“adi_ball.png”的文件。
3、對(duì)象開(kāi)發(fā)
ADI是在這些教程中創(chuàng)建的最簡(jiǎn)單的工具。它由三個(gè)GL Studio基元和一個(gè)GlsLightSource對(duì)象組成,很好地介紹了GL Studio用于創(chuàng)建越來(lái)越復(fù)雜的內(nèi)容的概念。
步驟1:在GL Studio編輯器中打開(kāi)“_adi.gls”。在“幾何體”選項(xiàng)卡中,單擊組“WizardCreated_PleaseDelete”,然后按“Delete”鍵刪除該組,留下一個(gè)空設(shè)計(jì)。

步驟2:打開(kāi)“Application”選項(xiàng)卡。將窗口標(biāo)題更改為“adi”,并將窗口的初始大小設(shè)置為512x512。

步驟3:?jiǎn)螕簟扒袚Q網(wǎng)格”按鈕右側(cè)的小箭頭按鈕,打開(kāi)“文檔首選項(xiàng)”對(duì)話框。在此對(duì)話框中,將網(wǎng)格間距設(shè)置為1.0,然后取消選中“顯示網(wǎng)格”。按“確定”關(guān)閉對(duì)話框。

3.1?創(chuàng)建邊框
周?chē)倪吙蛴梢粋€(gè)應(yīng)用了紋理的GLPolygon對(duì)象組成。
步驟1:從工具托盤(pán)中選擇“Rectangle”工具。請(qǐng)注意鼠標(biāo)光標(biāo)現(xiàn)在在“Graphical”選項(xiàng)卡窗口上移動(dòng)時(shí)變?yōu)槭止鈽?biāo)。
步驟2:在“Graphical”選項(xiàng)卡窗口中單擊并拖動(dòng),創(chuàng)建一個(gè)512*512的正方形。拖動(dòng)時(shí)按住Shift鍵將確保創(chuàng)建的多邊形是一個(gè)完美的正方形。查看“Graphical”選項(xiàng)卡的底部,以查看正在繪制的對(duì)象大小。

步驟3:通過(guò)首先在“Geometry”選項(xiàng)卡中選擇新創(chuàng)建的GLPolygon,然后再次單擊以編輯名稱,將對(duì)象重命名為“adi_panel”。默認(rèn)情況下,GL Studio對(duì)象會(huì)被賦予一個(gè)隨機(jī)生成的名稱,以便在同一場(chǎng)景中創(chuàng)建的對(duì)象不會(huì)與預(yù)先存在的對(duì)象發(fā)生命名沖突。

步驟4:默認(rèn)情況下,GLPolygon對(duì)象是在“Draw Mode”屬性設(shè)置為“Outline”的情況下創(chuàng)建的。更改中的“Draw Mode”屬性“Object Properties”選項(xiàng)卡改為“Filled”。這將消除在多邊形的外部范圍。

步驟5:通過(guò)在“Geometry”選項(xiàng)卡中選擇對(duì)象,然后在“Object Properties”選項(xiàng)卡中單擊“Texture Chooser”屬性旁邊的省略號(hào)按鈕,可以將紋理應(yīng)用于“adi_panel”對(duì)象。

這步將會(huì)打開(kāi)?‘Texture Chooser’ 對(duì)話框。
通過(guò)選擇“添加紋理…”按鈕,選擇要加載到編輯器中的紋理。這將打開(kāi)一個(gè)“文件選擇器”對(duì)話框,該對(duì)話框?qū)堰x定的紋理加載到編輯器中。選擇“adi.png”和“adi_ball.png”,然后單擊“Open”。這兩個(gè)紋理現(xiàn)在已經(jīng)加載到編輯器中。

選擇?‘a(chǎn)di.png’ ,點(diǎn)擊‘OK’,畫(huà)面顯示如下:

步驟6:紋理現(xiàn)在應(yīng)該應(yīng)用于“adi_panel”對(duì)象,但縱橫比已扭曲。要更正此問(wèn)題,請(qǐng)單擊“對(duì)象屬性”選項(xiàng)卡中“紋理調(diào)整”屬性中的“實(shí)際大小”按鈕。這將在編輯器中以1:1映射紋理。
可以通過(guò)選擇工具箱中的“紋理調(diào)整”工具來(lái)調(diào)整紋理的位置。

這將使編輯器進(jìn)入“Texture Placement Mode”,這樣可以沿著對(duì)象的曲面拖動(dòng)紋理位置。使用鼠標(biāo)光標(biāo)將包含邊框邊框邊框的紋理部分定位到“adi_panel”對(duì)象的中心。
注意:如果紋理大于應(yīng)用到的幾何體,則當(dāng)前應(yīng)用的紋理的“ghost image”將顯示在沒(méi)有幾何體的任何位置。這有助于對(duì)象的紋理放置。
步驟7:在“Appearance Settings”部分的“Object Properties”選項(xiàng)卡上,將“adi_panel”對(duì)象的“Pick Mode”屬性更改為“Unpickable”。由于擋板本身沒(méi)有任何東西是交互式的,因此將此對(duì)象設(shè)置為“Unpickable”將通過(guò)在確定場(chǎng)景中拾取的對(duì)象時(shí)跳過(guò)此對(duì)象來(lái)優(yōu)化運(yùn)行時(shí)拾取算法。對(duì)于在運(yùn)行時(shí)不顯式處理來(lái)自用戶的任何輸入的任何對(duì)象,這樣做是一種很好的做法。
3.2 創(chuàng)建ADI球體
下一步是使用帶紋理的GlsSphere對(duì)象創(chuàng)建ADI球。
步驟1:從工具托盤(pán)中選擇“GlsSphere”工具。當(dāng)在“Graphical”選項(xiàng)卡中單擊并拖動(dòng)時(shí),這將創(chuàng)建一個(gè)球體對(duì)象。單擊并拖動(dòng)可在球適合的邊框中心附近創(chuàng)建一個(gè)“GlsSphere”對(duì)象。首次創(chuàng)建球體時(shí),大小并不重要。將在“Object Properties”選項(xiàng)卡的“Properties”表中對(duì)對(duì)象進(jìn)行微調(diào)。

步驟2:將對(duì)象重命名為“adi_ball”。
步驟3:下一步是在“Object Properties”選項(xiàng)卡上微調(diào)“adi_ball”的屬性。
在“對(duì)象屬性”選項(xiàng)卡中將“Object Properties”更改為“Filled”。
將半徑值更改為172.00。這是正確填充“adi_panel”對(duì)象所需的大小。
將Stacks屬性更改為50。
將Slices屬性更改為50。
將“Texture Minification”更改為“Linear Mipmap Linear”。

將“Mapping Technique”更改為“Modulate”。這將確保正確繪制照明和Gouraud Shading。
請(qǐng)確保暫時(shí)未選中“Enable Lighting”屬性?,F(xiàn)在啟用此屬性將導(dǎo)致一個(gè)黑色球體,因?yàn)閳?chǎng)景中沒(méi)有光源來(lái)照亮對(duì)象。一旦在下一節(jié)的場(chǎng)景中放置了燈光,就會(huì)啟用此選項(xiàng)。
選中“Gouraud Shading”屬性以啟用Gouraud-Shading。
步驟4:下一步是應(yīng)用適當(dāng)?shù)募y理。單擊“…”按鈕,然后選擇“adi_ball.png”紋理。

這將把紋理映射到球體。如果“Texture Adjustment”屬性尚未展開(kāi),請(qǐng)展開(kāi)該屬性,然后單擊“Stretch To Fit”按鈕。

這將確保完整的紋理將以實(shí)際紋理大小映射到對(duì)象。

步驟5:請(qǐng)注意,ADI球反向旋轉(zhuǎn)90度-順時(shí)針?lè)较虻倪@是由于紋理的方向。我們通過(guò)單擊“Rotate 90 Clockwise”按鈕來(lái)抵消紋理的旋轉(zhuǎn)方向,該按鈕會(huì)旋轉(zhuǎn)“adi_ball”。

旋轉(zhuǎn)對(duì)象時(shí),它們的DCS坐標(biāo)也會(huì)旋轉(zhuǎn)。由于“DynamicTranslate”和“DynamicRotate”適用于對(duì)象的DCS坐標(biāo),因此我們需要將它們旋轉(zhuǎn)回來(lái)以匹配世界坐標(biāo)。
一個(gè)簡(jiǎn)單的方法是在“Adjust DCS”屬性下拉列表中選擇“Align To World Coordinates’”。
注意:更新DCS時(shí),請(qǐng)確保“‘Texture Placement”模式未處于活動(dòng)狀態(tài)。如果處于活動(dòng)狀態(tài),請(qǐng)?jiān)俅螁螕簟啊甌exture Placement”模式按鈕以禁用它。

確保并完成此步驟,否則俯仰和滾轉(zhuǎn)的旋轉(zhuǎn)將不正確。

步驟6:最后一步是設(shè)置“adi_ball”的位置。這可以通過(guò)在“Geometry”選項(xiàng)卡中選擇“adi_ball”對(duì)象,然后單擊并將該對(duì)象拖動(dòng)到擋板后面的位置來(lái)完成。移動(dòng)對(duì)象也可以通過(guò)使用箭頭鍵調(diào)整位置來(lái)完成。
啟用“Snap To Grid”后,箭頭鍵將按為網(wǎng)格設(shè)置的距離移動(dòng)對(duì)象可能需要禁用“Snap To Grid”,以便對(duì)ADI球進(jìn)行精細(xì)的位置調(diào)整。

將左視圖更改為“Y/Z”軸視圖。當(dāng)鼠標(biāo)位于左側(cè)拆分視圖上時(shí),向左移動(dòng)“adi_ball”對(duì)象。這將使球沿負(fù)Z軸方向平移,從而將球移動(dòng)到擋板后面。

高亮顯示對(duì)象層次結(jié)構(gòu)中的“adi_ball”對(duì)象,然后使用“向后移動(dòng)”圖標(biāo)按繪圖順序?qū)di_ball對(duì)象移動(dòng)到“adi_panel”對(duì)象后面。
3.3 創(chuàng)建燈源
該場(chǎng)景需要一個(gè)光源來(lái)正確照明ADI球。
步驟1:在創(chuàng)建光源之前,請(qǐng)為“adi_ball”對(duì)象啟用“enable Lighting”屬性。
步驟2:?jiǎn)螕艄ぞ邫谥械摹癓ight Source”工具。單擊“圖形”選項(xiàng)卡中的任意位置將在該點(diǎn)創(chuàng)建光源。
步驟3:定位“GlsLightSource”,使其垂直居中于“adi_ball”對(duì)象,并在正Z軸上與之相距一小段距離。

步驟4:將“恒定衰減”屬性更改為0.70。將“Light Type”更改為“Local”。

請(qǐng)注意,使用“Local”燈光類(lèi)型時(shí),照明效果會(huì)更加明顯??赡苄枰{(diào)整“GlsLightSource”的位置以達(dá)到適當(dāng)?shù)恼彰餍Ч?/p>
3.4 創(chuàng)建水平導(dǎo)桿
ADI的對(duì)象創(chuàng)建的最后一步是創(chuàng)建水平導(dǎo)桿。
步驟1:使用“矩形”工具創(chuàng)建一個(gè)GLPolygon,大致覆蓋“adi_ball”的地平線中心,并稍微延伸超過(guò)圓形開(kāi)口。將對(duì)象重命名為“horizon_line”。

步驟2:將“Draw Mode”更改為“Filled”。
應(yīng)用“adi.png”紋理。使用紋理調(diào)整工具將紋理的水平線部分居中到多邊形的中間。單擊“Actual Size”以調(diào)整紋理。

ADI的圖形布局現(xiàn)已完成。下一步是將行為添加到ADI。代碼開(kāi)發(fā)部分解釋了正確控制ADI所需的屬性。
3.5 編譯和與運(yùn)行
在Visual Studio中,生成并運(yùn)行項(xiàng)目,方法是選擇“生成”->“生成解決方案”,然后在應(yīng)用程序生成完成后選擇“調(diào)試”->“無(wú)調(diào)試啟動(dòng)”。ADI可以在應(yīng)用程序中看到,但此時(shí)它不會(huì)移動(dòng)。下一步將定義ADI設(shè)置動(dòng)畫(huà)的方式。
這節(jié)繪制ADI部分到此結(jié)束,下一節(jié)介紹代碼部分。