制作ADI
地平儀(ADI, Attitude Direction Indicator)用于讓飛行器駕駛員知道飛行器的俯仰角和翻滾角。
目的
GL儀表單元開發
step 1: 打開上述”_adi.gls”檔案,後清空GL的Geometry視窗的所有Object。
step 2: 打開Application視窗,命名window title為adi,并設定視窗的初始大小為512 X 512。
step 3:點選工具欄中工具上的箭頭,在打開視窗中按下述圖中紅框圈中的内容進行設定。
添加屬性來處理Pitch/Roll
“Pitch”屬性來處理object關于x軸的旋轉,”Roll”屬性來處理關于z軸的。
step 1: 建立一個名為”Pitch”的float型屬性,并擁有為0.0f的初始值。
step 2: 将下屬代碼添加到屬性的設定函數内(即void Pitch( const float& value )):
\1. //Clamp the incoming values to a range between -90.0f and 90.0f
\2. _pitch = CLAMP_VALUE(value, -90.0f, 90.0f);
\3. adi_ball->DynamicRotate(_pitch, X_AXIS);
該段代碼将可以實作”adi_ball”以x軸為中心在(-90.0f, 90.0f)的範圍内動态旋轉的功能。
step 3: 建立一個名為”Roll”的float型屬性,并擁有為0.0f的初始值。
step 4: 同樣将下屬代碼添加到屬性的設定函數内:
\1. // Clamp the incoming values to a range between -180.0f and 180.0f
\2. _roll = CLAMP_VALUE(value, -180.0f, 180.0f);
\3. adi_ball->DynamicRotate(_roll, Z_AXIS);
計算
函數Calculate()用于周期性地驅動儀表,且在每幀渲染前被調用。若函數體過大,就會對程式的實時性造成了一定的影響。
step 1: 展開”Class Method”後選中Calculate()函數,在代碼輸入框中追加下屬代碼:
\1. if (Testing())
\2. {
\3. // Exercise the Pitch and Roll properties with
\4. // input values generated from RampFloat.
\5. Pitch( RampFloat(time / 2, -25, 40) );
\6. Roll( RampFloat(time / 3, -30, 30) );
\7. }
包含glsutil.h的效用函數
因為Calculate()函數中用到了ramping函數,而這些函數包含在頭檔案”glsutil.h”内,故該頭檔案需要被添加到我們的類中。
step 1: 在”Code”頁籤中選中”file _adiApp.h”選項,在代碼輸入框内輸入如下内容:
\1. #include
編譯+運作+測試
mpFloat(time / 3, -30, 30) );
ADI動畫般的動起來,就是通過效用函數RampFloat()傳遞到Pitch和Roll的值。