
让年轻的听众放松身心,让这位古老的讲师充分展现您对云事物,微服务和lambda表达式的渴望。 现在以安静的语调说话,让您的耳朵弯曲,因为我会告诉您一个最令人兴奋的故事。 一个神奇而又神秘的故事,40美元,这是我建造过的最伟大的东西。 就像许多好故事一样,它始于轰隆声。
就是说,在2015年的夏天……我炸死了自己。
有趣的故事……我和我的妻子正准备为我们的房屋再融资,并决定在鉴定人来之前清理地下室。 项目过去和被遗忘的地穴。 实验和测定实验室。 然而在这一天,命运对我来说却有些不同。 在清理一堆奇怪的旧学校论文的过程中,由于某种原因,我感到有必要握住我所有的《地理》学期论文,我在袋子底部暗淡地放了一个脱模剂的硅罐纸回收。 这个错误,尽管如此愚蠢,但短暂地改变了我的人生道路,并因此产生了我所做的最激动人心的事情。
现在,我已经在专业和个人方面做了很多工作,但这是我发自内心的。 无论我们部署存储阵列多少次,解决客户问题的多少时间,或者没有互联网且期限为五天的半途而废的项目,都很难击败那些项目。 这是不同的东西,因此,它具有强大的功能,与我曾经从事的任何其他项目不同。 只是想那段时间让我开心。 我解决了我一直想解决的问题。 而且,尽管它从来都不打算供我地下室以外的任何人使用,但每次旅行,工作,上学,上学或休闲时,我都想到了远离地下室的那个项目。 对我来说,它不仅仅是地下室。
就像命运那样,那天晚上晚些时候,我们举行了一次小型聚会,想在后院开一个小火炉。 当我想起我们在地下室有一袋可循环使用的纸时,我小心翼翼地将木头堆成整齐的堆。 我把一袋文件放在后院火坑的底部,并在上面堆了更多木头。
在天黑之前,当几个人到达时,我点燃了火坑。 几分钟后,火种就将余烬留在了回收袋中。 纸燃烧着,火焰越来越大。 我听到一阵嘶哑的嘶嘶声,然后发出嘶嘶声,没有想到我本能地靠近火势一点,以便可以喷一点水来调和它。 水一碰到,罐子就冷却了,气溶胶会在距我脸约5英尺的大火球中爆炸。 火球猛扑过去,吞噬了我的大部分头发,胡须和脸。 不知何故,我仍然设法留住了眉毛! 大眼镜取胜。

现在,不必再为亲爱的听众烦恼了,因为这个故事的结局是以用火把和ffff战斗龙和地精的故事而告终。 火。 自从烧伤治愈以来已经有很多年了,但是那场火球的记忆和随后的“烧伤”持续了数周。 火球在路径中消耗氧气时发出的声音。 难忘。 我妻子抓住软管,喷了我的脸。 我鼻子上的皮肤脱落了。
短暂地呆在烧伤病房,大量的纱布和silvadene之后,我有了新的生活和一对无皱纹的双手。 值得庆幸的是,这只是二度烧伤。 令人难以置信的痛苦,但只有二度灼伤。 我真的很幸运。

快进一个月左右后,在看医生时,他告诉我不要在没有SPF 50的情况下一年不晒太阳。 一年? 但这是冲浪季节! 爱的夏天。 所谓爱,是指将我的糊状肉拖到长板上的热爱,这样我就可以用其余的“傻瓜”将其“浸入水中”。 我有一个新的退潮,我渴望使用它。 但是,即使SPF为50,天空中那幅辐射式压力锅的感觉仍像是有人在我的脸上放了一条蒸热的小毛巾。 甚至连带走垃圾的旅行也很痛苦。 在我不知道冲浪的夏天结束之前,树叶在秋天凉爽的早晨垂下,在冬天的第一个早晨散发出云雀的味道。
当时,我是位不错的程序员。 除了我主要从事编程工作的几个职位外,编码一直是我的爱好。 因此,那个冬天,我没有为自己感到难过,而是想到了一个地下室。 我做了任何体面的程序员都会做的事情。 我储备了冰淇淋,库尔斯,croix和饼干,然后进入地下室进行冬季编程。 我有个主意

因此,您可能会问自己,为什么不使用旧电视,将其放在桌子上,登录roll20并完成操作? 好吧,说实话,这太简单了,没有真正的挑战。 我想要我做的东西,完全按照我想要的去做。
此外,我也很开心! 酵母和……酵母,水以及类似比萨面团的味道的力量。 ORS! (如果您正在听,很高兴,请给我戴顶帽子)。
此外,这是2015年,也就是2016年冬天。Roll20越来越流行,但是我想和朋友一起坐下来玩。 就像那些说他们不喜欢电子书的人一样,因为他们喜欢纸质的感觉。 这是同一件事,但有骰子和龙! 互联网上的游戏很棒,但是当我介绍曾经有过的最糟糕的怪物(猫头鹰熊),新的地图,或者在不使用wacom数位板的情况下放在桌子上时,我想坐下来观看玩家的反应。 我想做些让我引以为豪的事情。
规则很简单。 我不想戴花哨的oculus头盔或不想让每个人都带平板电脑。 我想要的东西融合了现在和“未来”。 当我们大家一起坐下时,我希望桌子能工作……不需要其他设备。 将微型模型放在板上,它将以可自定义的攻击范围或您在黑暗中可以看到的距离照亮背后的屏幕! 我想为我奠定基础。
还有另一个原因……一个很大的原因。 当时有一张交互式开发桌,您可以以10,000美元的价格购买。 微软出售了这些开发表,我知道对于普通的D&D爱好者来说,它们是遥不可及的,他们也为自己的生活编码并制作东西供他的朋友们享用。 而且,我知道我可以做得比10个大奖赛还要好。
因此,我手握着croix并在碗中放了冰淇淋,然后我开始制作一个互动的地牢和龙桌。

老实说,这不是一个容易的挑战。 我对如何使其工作有一个想法,但是我对如何使游戏的逻辑功能一无所知。 因此,我着手做任何优秀的程序员都会做的事情。 我用谷歌搜索“互动地牢和龙桌”。 不幸的是,这并没有真正产生任何出色的结果。 有几个人在制作交互式桌子,有几个在桌子上放电视,但是除了一小部分使用Microsoft dev桌子的学生,没有人真正在制作交互式地牢和龙的桌子。
就在那个时候,龙与地下城5e刚出来。 它充满了漂泊在海上的玩家的风帆,并重振了新一代的玩家。 旧帽子除掉了……旧帽子,而新玩家也加入了队伍。
现在或从来没有。

最初,我在NADIR的相机上使用基准进行了很多成功。 基准是具有独特模式的对象,可轻松跟踪ID,运动和方向。 基准和社区的核心愿景为我提供了方向,加速和很多其他方面的东西。 但是,我离摄像机越远,保持基准位置不变的可能性就越小。 移动超过几英尺远,您可能需要放大到基准点(并丢失桌子的总视图),或者您需要使用多摄像机阵列。

尽管我没有排除多相机阵列的可能性,但我知道它比所需的要复杂得多,我想降低成本。
在那个冬天,我尝试了各种对象跟踪工具,每种都有各自的优缺点。 有些声称可以使用基准和低分辨率相机,但结果充其量是不确定的。 当时Tensorflow并不是真正的主流,而且YOLOv2出来还需要几年时间。 因此,剩下了单个对象的识别。 并且尽管确实有可能,因为OpenCV已经存在了很长一段时间,所以我暂时不想离开CCV。 如果我能留在那条车道上,那么我就不需要在逻辑之上添加更多内容。 另外,我只在地下室运行一台垃圾服务器,它需要从中运行。
因此,我决定需要一台USB摄像头,该摄像头应支持可覆盖6英尺长桌子的广角镜头。 输入PSEye和自定义镜头。 这东西不到40美元,还带有一个3D打印的盒子……很快就分崩离析,需要用胶带将它们粘在一起。

当原始的原型使用高射投影仪和镜子时,我最终决定将电视嵌入由旧的MDF板和旧桌腿制成的桌子上。

放在一起时,我在NADIR拥有一台USB摄像机,该摄像机将广角镜头插入运行CCV的垃圾服务器。 我打开了所有东西,并通过相机看了看。
那是我发现荧光灯反射的时候。 每次基准点进入相机的那个部分时,我都会丢失物体。

那真是太可惜了。 我怎么可能忽略了最重要的部分? 我在桌子上切了一个大洞,在旧电视上加了玻璃,然后……而且……玻璃刚刚反射了光。 那是另一个死胡同。 这种错误有点扼杀了动力。 到那时,这是初春,我想搁置该项目。
因此,我休假了几个星期,将想法付诸实践。
然后它就撞到了我。 我不记得那一刻的确切时刻,但我记得跟我妻子说了些话,然后冲进地下室。 就我所知,我本来可以做晚饭的。 不用说,如果我发现自己涉足其他项目,她非常擅长接任。
我在手机上画了一张草图。 不,那不是某种LED淋浴器。 那是一个微型的,上面有一个LED。 但这不是普通的LED。

答案? 超越可见光,到达近红外!

我去了亚马逊,订购了一些850nm的LED和一个用于相同光谱的非常窄的带通滤光片。 一位朋友帮助我焊接了木板。 窄带通滤波器可以滤除可见光谱,因此我在桌子上唯一看到的就是LED。

当然,有些东西需要修改,例如电视的背光灯,奇怪地熄灭了NIR,但是在菜单中被禁用了。 进行这些调整后,我可以对游戏表面进行镜头的2D校准。 幸运的是,CCV使这变得非常容易。
在进行相机校准之前……我必须进行一些涉及微型和LED笔的简单测试。

我第一次跟踪该LED,那是纯粹的幸福。 我设法在桌子上追踪了一个物体,并在其后面投射了正确的位置! (它在此gif上面,但它是早期的原型)。

剩下的现在只是编码,并为缩影建立更好的基础。 虽然我知道编码需要花费一些时间才能使所有功能正常工作,但是我知道我可以做到。 我越来越近了。
我从简单的背景开始,并模拟了多个移动物体,部分原因是我只有一个正在运行的微型板。 首先是战斗地图。

经过模拟测试后,我设法增加了几块板子。 答对了! 跟踪了多个对象。 虽然需要调整结果,但这是一个好兆头!

最初的效果只是圆圈,显示了一个对手可能有多远可以攻击另一个对手。 从那里,我使用数组构建了越来越复杂的图层和照明系统。 我什至设法到达了玩家可以探索洞穴的地方。

虽然我认为要花几个星期才能完成,但实际上却花了几个月。 在某处有一个教训。 也许。 当然。 好的,您花了多长时间才能编程并添加一两个指数。 到我为球员准备的时候,那是2016年的夏天。
我仍然记得我们大家坐下来一起玩时他们脸上的表情。 那是无价的。 最后,我们用了大约一年的时间。 我们在上面玩过各种游戏。 这是我编写过的最好的东西之一。
有时,我们去了遥远的地方,例如“蟹岛的秘密”

其他时间,当他们的手推车在“失落的城堡”中的一座桥的一半处摔倒时,这是一次令人惊讶的遭遇。

有时候将它们放在战场地图上,然后让它们在“您的王冠国度”中向国王证明自己的价值,这是很好的。

不管在哪里,我们都一起在同一房间里。 那就是我的产品与播放器可用的其他选项之间的区别。 没有滞后,没有朋友在战斗中掉线……我们在一起。
我最近遇到了代码库,并决定至少创建一个有关它的博客。 最终,减去我的开发时间,我花了40美元左右,它可以与您放置的任何电视或显示器一起使用。 我为此制作了数百张地图。 这就像将图像放入代码中一样简单。
我太喜欢这个小东西了,以至于发现分享让我如此高兴的事情是正确的。
因此,事实证明,这真是一个火球,实际上变得很酷。 最好的编程来自发自内心的……火球……到脸上。
如果您对代码感兴趣,请告诉我,我们可以谈谈。 我很乐意分享它,以便其他人可以从中获得乐趣。

感谢您的阅读,也许您所有的卷都是20册。