尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

如何设计单片机版我的世界

如何设计单片机版我的世界 前言最近在单片机上做了个我的世界借此分享些经验如何提高我的世界性能或部署在低性能平台上。设计地形数据结构地形采用三维数组数组里仅保存方块类型提高性能如下图所示。uint8_tcube_list[WORLD_X][WORLD_Y][WORLD_Z];//低四位存储方块类型优化超频stm32h750标定480mhz,但是在-ofast优化下能达到665mhz。O3优化也可以但是能用的主频没Ofast高。渲染优化方块优化被遮挡的方块不渲染。面优化有被其他方块挡住的面不渲染提前计算好遮挡哪个面然后存入遮挡数组中索引是方块编号每方块一字节低六位存储六个面的遮挡标志通过查找数组中每面对应方块是否为空气可知是否遮挡。另外还有背面剔除优化 方块背面需要剔除这里每个方块共用一套顶点索引保证每个三角形按顺时针排列顶点这样渲染程序看到逆时针三角形就知道这是背面不用渲染。范围渲染单片机版我的世界可以存下范围很大的世界但是要渲染所有方块就太吃性能了因此可以学电脑版mc一样只渲染附近一小片区域我渲染了附近五十格区域能看到附近全部重要物体且性能不低于80fps稳定90fps哔哩哔哩查看效果https://www.bilibili.com/video/BV1HzbR6KEmd/?spm_id_from333.1387.homepage.video_card.click。如果需要请下载工程单片机版我的世界范围渲染硬件优化STM32H750 参考手册 是深入了解该芯片硬件特性的重要资料。速度优化硬件是必不可少的这里为了顺利输出图像数据单片机采用了mdma输出内存数据到qspi屏幕减小了cpu占用。采用双缓冲则可以一边渲染一边输出。内存优化单片机内存资源很少我这里的内存大概1Mbyte左右为了减少占用直接用颜色表代替颜色每个像素颜色表索引1字节对比一像素rgb565两字节占用减少一半。我这里rgb需要512k的内存用了颜色表仅需256k。位置计算需要计算位置比如移动需要根据移动角计算xy值以及根据地形计算当前z坐标值高度而且高度变化不能跳跃而是随时间插值处理。地形生成好的性能需要在地形生成阶段就优化好。一般只生成地表节省性能。另外为了防止遍历z轴上每个坐标还需要记录当前xy坐标的最高方块高度。进阶的优化方案合并三角形比如很多三角形可以合并大三角来减少渲染三角形数。问题1 宏定义优先级问题比如这样#deinfeA#defineB2*A#defineC1/B可能你以为C答案是1/(2A)其实是1A/2因为编译器看到的是1/2A,不会加上那个括号。2 弧度弄成角度sin函数的输入是弧度如果输入角度值旋转速度要快上90倍(180/3.14)3 volatile慎用使用volatile在高主频下就可能出错volatile是禁止优化这时候volatile变量跟不上其他变量的节奏就可能出错降低主频可以但性能也低了不想降主频你调试完就删掉volatile。4 屏幕雪花可能是屏幕spi的驱动时钟和cpu不同源时钟不匹配导致雪花。神秘死机一定要加上-mslow-flash-data不然CPU无故死机。
返回列表