制作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) );
\7. }
包含glsutil.h的效用函数
因为Calculate()函数中用到了ramping函数,而这些函数包含在头文件”glsutil.h”内,故该头文件需要被添加到我们的类中。
step 1: 在”Code”选项卡中选中”file _adiApp.h”选项,在代码输入框内输入如下内容:
\1. #include
编译+运行+测试
ADI动画般的动起来,就是通过效用函数RampFloat()传递到Pitch和Roll的值。