GLS-高度表制作

简介: 文章目录制作高度计目的配置工作环境Object的设计创建背光板(Bezel)创建电动/气动开关创建气压设定旋钮创建高度计指针创建高度计的里程表创建气压计表创建电动/气动显示标识创建仪表的阴影编译测试代码开发添加测试属性添加属性来处理Altitude和BarometerInitializeCalculate添加效用函数的头文件.Object的回调

制作高度计


高度计是通过对大气压强的测量来确定高度的。

目的

image.png

最终效果图

配置工作环境


创建一个名为”_altimeter”的工程,将GL Studio安装目录教程内的_altimeter教程下的testures文件夹拷贝到当前文件夹。

image.png

Object的设计

Step 1: 在创建的工程目录下,找到”_altimeter.gls”,并打开。后在”Geometry”选项卡窗口中删除默认生成的group。


Step 2: 打开”Application” tab, 为window title改名为”altimeter”, 然后设置窗口的初始尺寸为390x395。


Step 3: 在工具栏找到右侧的下拉箭头,在弹出的对话框中按下图内容进行设置:

image.png

创建背光板(Bezel)

背景遮光板由多边形object和其纹理组成。


Step 1: 选择工具栏中的工具;


Step 2: 绘制一个390x395的矩形;


Step 3: 为其重命名为”altimeter_panel”;


Step 4: 在”Object Properties” tab中,将”altimeter_panel”的Draw Mode设置为Filled;


Step 5: 同样在”Object Properties” tab中,点击Texture ->Texture Chooser上的 按钮,进入纹理选择对话框,将纹理添加进来,并选中”sltimeter.png”纹理;

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

\1. // Clamp the value of the odometer from 0 to 99999.


\2. _altitude = CLAMP_VALUE(value, 0.0f, 99999.9f);


\3. // Set the odometer readout to the actual incoming clamped value


\4. alt_digits->Value(_altitude);


\5. // Calculate the digits less than 1000 to set the needle position


\6. float alt_100 = (float)fmod(_altitude, 1000.0f)/100.0f;


\7. // Set the needle rotation using DynamicRotate, converting 100’s of feet to degrees.


\8. needle->DynamicRotate(-(alt_100 * (360/10)), Z_AXIS);


这段代码实现仪表表针绕Z轴的动态旋转,同时该值也会在显示在高度里程表上。


Step 3: 新建属性”float Barometer = 0.0f”,


Step 4: 为该属性的Set函数添加实现函数如下:


\1. _barometer = value;


\2. baro_digits->Value(_barometer);


本段代码将实现气压计表盘的显示。


Initialize

在geometry创建之后,Initialize()函数就开始执行了。


Step 1: 在”Code” tab中找到Initialize()函数,在代码输入框添加如下代码:


\1. Barometer(28.6f);


Calculate

Calculate()函数的调用发生在每帧的渲染之后。由于每帧循环都会调用该函数,故而切勿在函数体执行过多的内容。


Step 1: 找到Calculate()函数,在代码输入框中追加上下述代码:


\1. if (Testing())


\2. {

\3. // Generate ramping values from 0.0f to 12000.0f


\4. Altitude( RampFloat( time * .07, 0.0f, 12000.0f ) );


\5. }


本段代码使用效用函数RampFloat()在一个正弦波上值测试高度计的显示。


添加效用函数的头文件.

效用函数不包含在run-time库中,隐使用到了效用函数RampFloat(), 故需要添加对应的头文件”glsutil.h”。


Step 1: 在”Code” tab内选中”file _altimeterApp.h”, 在其代码输入框中输入以下内容:


\1. #include


Object的回调

GL Studio允许回调,回调一般发生在用户输入(鼠标,键盘,或其他),并且回调允许programmers定义与object相关的特定功能。


在该教程内需要定义两个回调函数,一个用于处理和气压读数相关的旋钮输入事件,另一个用于处理和ELEC/PNEU flag相关的开关。


Step 1: 首先先在”Geometry” tab中选中”baro_knob” object, 而后在”Code” tab中找到Object Callbacks->Selected Object Callbacks(#), 参考下图

image.png

点击代码输入框为所选择的object(这里是刚选中的baro_kbob)创建回调功能。


回调函数要求返回0或1,而这取决于该回调函数的event是否需要向上遍历该object的父节点的回调,更多information参考User’s Manual。


Step 2: 旋钮需要完成气压的读数显示功能,所以在回调函数中完成的正是此事。将下述代码添加到代码输入框:(Warning: 直接插入的话,会清除掉插入位置之后的内容)


\1. int handled = 0;


\2.


\3. if (ObjectEventIs(ev,“PositionVal”))


\4. {

\5. // If the knob is turned, we change the value


[外链图片转存中…(img-tjNZjQJY-1615698474939)]


点击代码输入框为所选择的object(这里是刚选中的baro_kbob)创建回调功能。


回调函数要求返回0或1,而这取决于该回调函数的event是否需要向上遍历该object的父节点的回调,更多information参考User’s Manual。


Step 2: 旋钮需要完成气压的读数显示功能,所以在回调函数中完成的正是此事。将下述代码添加到代码输入框:(Warning: 直接插入的话,会清除掉插入位置之后的内容)


\1. int handled = 0;


\2.


\3. if (ObjectEventIs(ev,“PositionVal”))


\4. {

\5. // If the knob is turned, we change the value


// of the Baro



image.png

目录
相关文章
|
1月前
|
资源调度 JavaScript 前端开发
使用WbbGPU制作爱心
7月更文挑战第9天
22 0
|
3月前
|
安全 Android开发 数据安全/隐私保护
制作系统签名
五月打卡
33 0
|
8月前
水晶头制作
水晶头制作。
142 44
|
前端开发 JavaScript 编译器
聊聊制作网站那些事!
聊聊制作网站那些事!
57 0
|
9月前
|
iOS开发
如何制作游戏微端
如何制作游戏微端
92 0
|
容器
如何在微信小游戏制作工具中快速的制作一个血条?
如图,添加了两个血条的图片,一个当作背景,一个当作前景,并且把这两个图片放到了一个“血条1”容器中,另外增加了一个“打你丫的”按钮,用来模拟攻击,点击“打你丫的”按钮,血条就会掉血。
161 0
|
数据可视化 程序员 开发者
零基础如何自己制作游戏?
首先我们来看一下这个问题本身,能问出这个问题的基本上就是新手,小白,零基础,对于游戏开发这个领域没有任何的了解的人。为什么这么说呢?因为只有当你对于一个领域没有任何了解的时候,才会问出这么宽泛的问题。 所以你看,但凡问那种很宽泛的问题的,基本上都是对于这个领域没有任何了解的,也就是新手小白。但是新手小白也没有什么可丢人的,毕竟谁在接触一个新领域的时候不是新手小白呢?
318 0
|
数据可视化 开发工具 Android开发
个人尝试制作游戏最好的选择是什么?
有不少人都想尝试着做游戏,不论是尝试着实现自己曾经的游戏梦想也好,还是试着把做游戏当做一个副业也好,对于所有的想要或者正在做游戏的个人来讲,从微信小游戏开始都是一个最好的选择。 我自己现在正在做微信小游戏,而且也在教很多的学员做微信小游戏。你可能会觉得我这样说是有一定的动机的,但其实不然,如果我自己不相信这个平台的话,那其实我是没有必要自己做的,只需要忽悠让别人相信就可以了。但是现在我自己也正在致力于做这件事,这也证明了我对它的认可。不是有这么一句话吗?不要轻易相信一个人说了什么,而要看他做了什么。
127 0
|
搜索推荐 开发工具 Android开发
更“大”的微信小游戏制作工具
为什么这么久都不开发新功能了呢?因为人手和资源有限。这个可能跟很多人想的不一样,这个不是微信的产品吗?腾讯公司会没人没资源?大公司的实际情况可能还真跟很多人想的不一样。微信小游戏制作工具背后的团队不大,甚至比你想要的还要小,而且团队除了需要负责这个工具的维护之外,还有很多其它的事情需要处理。
228 0