我想让这个项目变成一个有趣的过程,让我的裸机框架能够读取glTF模型,创建摄像机系统和实时3D模型。更好的方法是什么呢?那么,我从OG《赛博格争霸》里的预渲染背景中获得了灵感。

不幸的是,我没有预料到这个想法前面的绝对地狱。自我折磨、痛苦和精神折磨的方式有很多。

glTF解析和载入并不是最难的部分,也不是扩展框架缓冲区来处理3D。...

然而,最差的部分是,我在通过json解析Tokens载入"sponza"模型时,我追寻的都是幽灵。

如果你将max token数量设得过低,那么渲染出错,但当你设置足够或更高的token数量时,它将会输出全黑的水平条,横跨摄像头,无论何时发生,也总是在相同的坐标上。结果发现,我在试图释放指针来释放内存时,造成了内存损害。

我的幽灵折磨源于,我试图把json tokens 结构换成静态的,想着「好吧,从现在开始我就把它们放到堆里,因为我无法释放它们了。然后,这导致只渲染出了模型的一半。问题的解决方案非常简单:在这里不需要释放tokens,因为它一旦渲染完成,就会在出现新的摄像机位置时呈现直到下一次重载。

我在win下用SDL解决了这个问题后,觉得有了一个绝妙的想法,让这在我的橘子派RV 2 SBC上就能工作。然而,这对我来说却是一个挑战。

因为我决定懒一点,我没在runtime的时候从microSD卡上读取数据,而是把数据包装成一bin并放在ROM里由BROM读取交给我的启动内核。我不得不修改资源装载系统,如果不这样,内核在启动完成后就会卡死。

我修复了问题,你可以看出来从这里的嵌入视频里,确实很好玩...只是太快。有些讽刺的是,如果你看到RISC-V系列的SBC如milk-v mars或橘子派rv2的geekbench评分,它们被评为最慢的。

希望你喜欢这里的小片段,这是我的混合开发和裸机编程的旅程。非常感谢你对结果和痛点描述的想法和反馈。