GLStudio ADI(地平仪)绘制示例教程[上]
ADI用于让飞机的飞行员知道飞机的俯仰和滚转状态。此示例将包括一个三维球体可以设置为在现实世界中相对于重力浮动。本教程还涵盖一些基本的照明技术,以及制作球体的材料的使用仪表看起来很逼真。最后,本教程介绍如何添加用户定义的类方法,以便您可以在工具中创建自己的行为。
1、绘制ADI目的
本文是指导用户如何使用GLStudio的基本技术创建一个地平仪,主要包括:
创建GLStudio基本对象体
给对象体添加纹理
创建GlsLightSource对象
使用Gouraud着色
在一个场景中使用灯光
创建用户定义的类特性

2、设置工作区
首先,创建一个名为“_adi”的项目和工作区。在工作区目录中,创建一个名为“textures”的文件夹,并从GL Studio教程文件夹中已完成的“_adi”项目中的“textures”文件夹中复制名为“adi.png”和“adi_ball.png”的文件。
3、对象开发
ADI是在这些教程中创建的最简单的工具。它由三个GL Studio基元和一个GlsLightSource对象组成,很好地介绍了GL Studio用于创建越来越复杂的内容的概念。
步骤1:在GL Studio编辑器中打开“_adi.gls”。在“几何体”选项卡中,单击组“WizardCreated_PleaseDelete”,然后按“Delete”键删除该组,留下一个空设计。

步骤2:打开“Application”选项卡。将窗口标题更改为“adi”,并将窗口的初始大小设置为512x512。

步骤3:单击“切换网格”按钮右侧的小箭头按钮,打开“文档首选项”对话框。在此对话框中,将网格间距设置为1.0,然后取消选中“显示网格”。按“确定”关闭对话框。

3.1 创建边框
周围的边框由一个应用了纹理的GLPolygon对象组成。
步骤1:从工具托盘中选择“Rectangle”工具。请注意鼠标光标现在在“Graphical”选项卡窗口上移动时变为十字光标。
步骤2:在“Graphical”选项卡窗口中单击并拖动,创建一个512*512的正方形。拖动时按住Shift键将确保创建的多边形是一个完美的正方形。查看“Graphical”选项卡的底部,以查看正在绘制的对象大小。

步骤3:通过首先在“Geometry”选项卡中选择新创建的GLPolygon,然后再次单击以编辑名称,将对象重命名为“adi_panel”。默认情况下,GL Studio对象会被赋予一个随机生成的名称,以便在同一场景中创建的对象不会与预先存在的对象发生命名冲突。

步骤4:默认情况下,GLPolygon对象是在“Draw Mode”属性设置为“Outline”的情况下创建的。更改中的“Draw Mode”属性“Object Properties”选项卡改为“Filled”。这将消除在多边形的外部范围。

步骤5:通过在“Geometry”选项卡中选择对象,然后在“Object Properties”选项卡中单击“Texture Chooser”属性旁边的省略号按钮,可以将纹理应用于“adi_panel”对象。

这步将会打开 ‘Texture Chooser’ 对话框。
通过选择“添加纹理…”按钮,选择要加载到编辑器中的纹理。这将打开一个“文件选择器”对话框,该对话框将把选定的纹理加载到编辑器中。选择“adi.png”和“adi_ball.png”,然后单击“Open”。这两个纹理现在已经加载到编辑器中。

选择 ‘adi.png’ ,点击‘OK’,画面显示如下:

步骤6:纹理现在应该应用于“adi_panel”对象,但纵横比已扭曲。要更正此问题,请单击“对象属性”选项卡中“纹理调整”属性中的“实际大小”按钮。这将在编辑器中以1:1映射纹理。
可以通过选择工具箱中的“纹理调整”工具来调整纹理的位置。

这将使编辑器进入“Texture Placement Mode”,这样可以沿着对象的曲面拖动纹理位置。使用鼠标光标将包含边框边框边框的纹理部分定位到“adi_panel”对象的中心。
注意:如果纹理大于应用到的几何体,则当前应用的纹理的“ghost image”将显示在没有几何体的任何位置。这有助于对象的纹理放置。
步骤7:在“Appearance Settings”部分的“Object Properties”选项卡上,将“adi_panel”对象的“Pick Mode”属性更改为“Unpickable”。由于挡板本身没有任何东西是交互式的,因此将此对象设置为“Unpickable”将通过在确定场景中拾取的对象时跳过此对象来优化运行时拾取算法。对于在运行时不显式处理来自用户的任何输入的任何对象,这样做是一种很好的做法。
3.2 创建ADI球体
下一步是使用带纹理的GlsSphere对象创建ADI球。
步骤1:从工具托盘中选择“GlsSphere”工具。当在“Graphical”选项卡中单击并拖动时,这将创建一个球体对象。单击并拖动可在球适合的边框中心附近创建一个“GlsSphere”对象。首次创建球体时,大小并不重要。将在“Object Properties”选项卡的“Properties”表中对对象进行微调。

步骤2:将对象重命名为“adi_ball”。
步骤3:下一步是在“Object Properties”选项卡上微调“adi_ball”的属性。
在“对象属性”选项卡中将“Object Properties”更改为“Filled”。
将半径值更改为172.00。这是正确填充“adi_panel”对象所需的大小。
将Stacks属性更改为50。
将Slices属性更改为50。
将“Texture Minification”更改为“Linear Mipmap Linear”。

将“Mapping Technique”更改为“Modulate”。这将确保正确绘制照明和Gouraud Shading。
请确保暂时未选中“Enable Lighting”属性。现在启用此属性将导致一个黑色球体,因为场景中没有光源来照亮对象。一旦在下一节的场景中放置了灯光,就会启用此选项。
选中“Gouraud Shading”属性以启用Gouraud-Shading。
步骤4:下一步是应用适当的纹理。单击“…”按钮,然后选择“adi_ball.png”纹理。

这将把纹理映射到球体。如果“Texture Adjustment”属性尚未展开,请展开该属性,然后单击“Stretch To Fit”按钮。

这将确保完整的纹理将以实际纹理大小映射到对象。

步骤5:请注意,ADI球反向旋转90度-顺时针方向的这是由于纹理的方向。我们通过单击“Rotate 90 Clockwise”按钮来抵消纹理的旋转方向,该按钮会旋转“adi_ball”。

旋转对象时,它们的DCS坐标也会旋转。由于“DynamicTranslate”和“DynamicRotate”适用于对象的DCS坐标,因此我们需要将它们旋转回来以匹配世界坐标。
一个简单的方法是在“Adjust DCS”属性下拉列表中选择“Align To World Coordinates’”。
注意:更新DCS时,请确保“‘Texture Placement”模式未处于活动状态。如果处于活动状态,请再次单击“‘Texture Placement”模式按钮以禁用它。

确保并完成此步骤,否则俯仰和滚转的旋转将不正确。

步骤6:最后一步是设置“adi_ball”的位置。这可以通过在“Geometry”选项卡中选择“adi_ball”对象,然后单击并将该对象拖动到挡板后面的位置来完成。移动对象也可以通过使用箭头键调整位置来完成。
启用“Snap To Grid”后,箭头键将按为网格设置的距离移动对象可能需要禁用“Snap To Grid”,以便对ADI球进行精细的位置调整。

将左视图更改为“Y/Z”轴视图。当鼠标位于左侧拆分视图上时,向左移动“adi_ball”对象。这将使球沿负Z轴方向平移,从而将球移动到挡板后面。

高亮显示对象层次结构中的“adi_ball”对象,然后使用“向后移动”图标按绘图顺序将adi_ball对象移动到“adi_panel”对象后面。
3.3 创建灯源
该场景需要一个光源来正确照明ADI球。
步骤1:在创建光源之前,请为“adi_ball”对象启用“enable Lighting”属性。
步骤2:单击工具栏中的“Light Source”工具。单击“图形”选项卡中的任意位置将在该点创建光源。
步骤3:定位“GlsLightSource”,使其垂直居中于“adi_ball”对象,并在正Z轴上与之相距一小段距离。

步骤4:将“恒定衰减”属性更改为0.70。将“Light Type”更改为“Local”。

请注意,使用“Local”灯光类型时,照明效果会更加明显。可能需要调整“GlsLightSource”的位置以达到适当的照明效果。

3.4 创建水平导杆
ADI的对象创建的最后一步是创建水平导杆。
步骤1:使用“矩形”工具创建一个GLPolygon,大致覆盖“adi_ball”的地平线中心,并稍微延伸超过圆形开口。将对象重命名为“horizon_line”。

步骤2:将“Draw Mode”更改为“Filled”。
应用“adi.png”纹理。使用纹理调整工具将纹理的水平线部分居中到多边形的中间。单击“Actual Size”以调整纹理。

ADI的图形布局现已完成。下一步是将行为添加到ADI。代码开发部分解释了正确控制ADI所需的属性。
3.5 编译和与运行
在Visual Studio中,生成并运行项目,方法是选择“生成”->“生成解决方案”,然后在应用程序生成完成后选择“调试”->“无调试启动”。ADI可以在应用程序中看到,但此时它不会移动。下一步将定义ADI设置动画的方式。
这节绘制ADI部分到此结束,下一节介绍代码部分。