点击蓝字|关注我们
上周我们小小地预告过,今天小编会给大家分享“饼干”游戏编程学习机的测评用户之一,薛萌老师带来的针对饼干掌机的性能测评写的三个测试程序。
变换线
我写的第一个测试程序是变幻线,也算是一个致敬。刚刚接触电脑的时候,windows休眠的时候就会自动启动屏保程序,在众多的屏保程序中我最喜欢的就是变换线,它简洁而又变化莫测,很长时间里我都在好奇这个程序是如何实现的。
看到过这个屏保的人如今都不年轻了
arcade.makecode平台支持Block, Python和Typescript三种语言,三者中目前最成熟的是Typescript,我对Typescript并不是特别熟悉,有些地方写得比较笨拙,但尽管如此,我还是用了不到100行代码就实现了变幻线。
”
Koch曲线
经过第一个程序的练手之后,我对于Typescript的使用有了一些心得,于是我开始琢磨第二个测试程序。
我写了一个Koch三角形,打算用分形生成的精细图案来测试一下饼干的显示精度。另外我没有用递归来生成分形曲线而是采用了递推的方法,随着迭代次数的增加不断向顶点数组中插入新的顶点,因为分形图案的顶点数增加得很快,所以有可能会把内存耗尽,如果出现这种情况正好可以看一下饼干在极限情况下的表现。
最终,我成功的在饼干的屏幕上绘制出了Koch三角形,并通过按键可以增加或者减少它的细节。总体上饼干的表现还是很不错的。
当我不断地提高迭代的深度时,出现了白屏,这是预想中的状况,因为飞速增长的顶点数最终导致了内存溢出,在这种情况出现的时候按下reset键可以立刻复位,鲁棒性很不错。
”
简单的3D渲染器
完成前面两个程序测试之后,我对typescript的手感已经出来了,ts的确是一门严谨而又不失灵活性的优秀语言,因为是静态语言,所以调试信息一目了然,自动补足功能也很完善,即便在轻量级的网页编辑器上也能够高效的编写代码。
第三个测试程序我打算在饼干上尝试实现一个简单的3D渲染器。
通常情况下,我们会把屏幕看成一个由像素组成的二维世界并通过横坐标,纵坐标,颜色,这三个参数来确定一个像素的状态。想在这样的环境中实现3D效果乍一看好像有点异想天开,但仔细想想就会发现,其实我们的眼睛能够感知的一切三维信息,都只不过是投影视网膜上的一张二维图片,电脑屏幕就是利用了这样的原理,通过投影变换,先将三维信息变成二维平面上的投影,然后再逐像素绘制在屏幕上,按照这个原理,饼干学习机的屏幕当然是可以显示三维物体的,背后的数学原理是完全一样的。
言归正传,我们利用投影解决了在二维屏幕上绘制三维物体的问题。在真实世界中,将一个物体沿着一个方向压缩,最后就可以得到它的投影,在三维图形学中,我们利用投影矩阵来实现类似的效果,矩阵之于数学,就好比钢琴之于音乐,隐秘的规律在其上无处遁形。在图形学中,矩阵更是随处可见,图形学中充满了向量,而矩阵则是向量的容器,它将向量打包装箱,然后用统一的规则进行高速运算。除了投影,旋转、平移、缩放,都可以矩阵轻松搞定,这些都超出了本文的范畴,有兴趣可以自行查阅资料。
经过一番折腾之后,三维立方体终于成功的在饼干的屏幕上显示出来了,随后我尝试了对立方体的各个面进行着色操作,处理方法也不难,首先根据面的法线剔除掉那些不可见的面,然后根据可见面的顶点信息计算出轴对称包围盒,最后扫描包围盒中的所有像素,如果这个像素落在面的内部,就进行着色,否则跳过。
逐像素扫描是一个极其消耗性能的操作,每一帧都要进行这样的操作显然超出了饼干的运算能力,所以最终我放弃了着色计划,因为即便是在电脑上,逐像素扫描的性能也很差,然而逐像素操作又是一个可以并行的过程,所以通常我们都会将这类脏活累活交给GPU去完成。
”
谁看了不说一句,薛老师也太厉害了!!
薛老师知乎:MENG
想必大家看完两篇饼干掌机测评后,对这款产品已经有了大致的了解了。我们随时欢迎广大用户为我们的产品、服务提出宝贵的建议和意见!
关 注 我 们
恩 孚 科 技
让编程触手可及
您好!请登录