unity仿真动画制作之路(一)

在做了很长一段时间的视觉后,我迎来了自己大三的第一个小学期。本以为这个小学期会和以前上过的一样,仅仅是完成一些实验就算过去了,但是没想到在它快要结束的时候,我会这样不舍。

小学期的内容比较简单,C++的程序设计,不涉及到软件的开发,也没有让人写过超过100行的代码。而最后让我花费时间和精力最多的,是MFC。开始的时候,我们用的版本比较老,是在VC6下面写的。之后,我用VS2019又重新写了一遍。最后大作业的题目是:

利用C语言/C++语言和Visual C++编程开发环境完成运动体弹道数学仿真系统开发,包括弹道数学模型解算、弹道数学仿真算法程序设计、
VC MFC 单文档设计、动态曲线显示、定时器程序设置等。

在这里插入图片描述
我按照老师给的内容搬运了一下代码,效果是这样的。我就在想,如果作业就这样结束了,那我仅仅算是及格,而并不能达到优秀或是更高的标准。我想给它加一些内容。单纯从界面上来看,无非是坐标系的绘制和两条曲线的生成。而你想从这个界面上再读取其他信息,似乎很难。于是,我的最终成果是这样的。

海上舰船打击陆地目标的仿真

在这里插入图片描述
海洋场景我借鉴了这篇文章

在这里插入图片描述
这是原文的小船。我把船换成了unity Asset Store的Simple Warships。我想做的是海上舰船攻击陆地目标的仿真动画。也就是为上面的MFC增加三维的视觉效果。unity和MFC进行通讯的想法得益于我的老师,他说可以在MFC的框架下,尝试搭配虚拟仿真引擎。最终,我选择了unity。

我将任务联想为海上的舰船收到了来自指挥所的命令,让其针对某一片海域进行侦察,并发射导弹打击陆地上的目标。

项目拓展

改写了坐标系的绘制函数,并将坐标标注在全屏幕上。仿真曲线的绘制因计算过快,难以看出曲线的生成过程,加入了Sleep()函数。并且优化了目标位置的初始化过程,增加了目标检测模块,用一个三层的同心圆标靶出了目标点的位置。

为了增强整体界面的视觉效果,加入了虚拟仿真引擎。并通过搭建服务器连接的形式,建立了数据传输通道。其设想为仿真海上舰船打击陆地目标的任务。将原有的坐标系优化为具有三维动态效果的海洋和陆地,将原点优化为一艘模型可观赏性较高的战列舰,具有移动、旋转及武器发射功能。以unity为服务端,MFC应用程序为客户端,以socket方式链接,分别为其写了通讯函数。

socket通信参考

图片展示

在这里插入图片描述
在这里插入图片描述
结语

在小学期之前,我是没有学习过C++的。之前也仅仅是对一些编程语言有比较浅的基础而已,缺乏实践。在小学期进行的过程中,我再仔细看以往的一些自主导航算法,或者一些系统文件,发现C++的代码量远胜于python,这个其实也有所耳闻。但是,现在我已经有能力逐步去看懂这些代码了,乃至于已经逐步走向了自主研发的道路。

这5个实验,其实通过阅读文档或是已经给出的程序,完成起来难度并不大,很少有程序需要花1个小时以上的时间去完成。所以在最后的大作业中,我想挑战一下自己,给出一个方案设想,就比如模拟海上舰船攻击陆地目标,在没有任何指导和不熟悉软件操作习惯的情况下,能否在短时间内完成自己的方案设想。

最后,也成功了也失败了。成功在于,我找到了unity和C++通信的方法,并且入门了C#。也给出了较为客观的仿真结果。失败在于,服务器之间的通信可能是因为版本问题断掉了,但因为知识太少不知道如何去调试。也没有实现我理想的转场动画,或者说例如3A大作中的动画效果。了解到了自己目前的极限了,但是也在脑海中建立了雏形。其实,我对仿真极其陌生,最熟的还是视觉比如深度学习、图像识别、目标检测、视觉导航、SLAM算法那一套。

大一时,师兄对我讲过,作品完成了100%最后呈现出了100%不算成功,只能说是及格。好的作品是,完成了100%但呈现出了150%。

我想,这就是我本次小学期也是最后一次实验的全部意义。这堂课真的让我学会了很多。同时也感谢我的队友,支持我的想法,并一起完成了这个工程量较大的项目。在这里感谢小学期所有的遇见和感动。

结语比正文长,不过也确实,这篇文章也是unity仿真动画制作之路的第一篇文章。主要也是想交代一下自己为什么会对仿真感兴趣,想要去学习仿真动画的制作。这样,继视觉工作之后,我又多了一种在很长时间之后或许可以引以为傲的看家本领。

转载请注明以下内容:
北京理工大学宇航学院探测制导与控制技术专业18级本科生刘鹏飞为小学期程序设计所做的最后一次拓展性实验。

或许,我会像去年担任C语言助教一样,成为这门小学期C++的助教。也或许,学弟学妹们的实验难度也会因为我这篇文章而增加。不过,这都是我乐意看见的。

猜你喜欢

转载自blog.csdn.net/qq_44868018/article/details/108936741