Meet Hypercubes~ O(∩_∩)O

🦎语言渲染n维立方体至终端,那真是非常amazing啊

Render High Dimensional Object In Terminal

So all this just to render a cube on your terminal ?

后来做成工程概论大作业的网页版本(手机慎点),使用了threejs这个图形库来绘制和打光,比起控制台来说虽然不那么geek,但是稍微更直观那么亿点,应该还存在一些bug,但是3,4,5维下应该是没什么问题

封面gif为超立方体绕xw与xz轴的旋转,至于结果的正确性,我参照了wiki且自认为无误,例如下图就是一些与超立方体相关的图片

超立方体解构
超立方体绕xw轴旋转

不妨先来看看我的代码都渲染出了些什么:

图像 说明
此为在Render 3D Object In Terminal基础上修改的代码,限于模型生成原理与渲染原理写的稀烂而无法拓展到更高的五维,且由于法向量并非实时计算而是手动设置,导致旋转时的”四维面“渲染错误(就是gif中看见明显是个正方体但是却没有正确的打光的一坨吞过来吐回去的东西)
后来对模型生成原理与渲染原理大改,引入顶点模型并实时计算法向量,正确渲染出了这个超立方体
在四维升五维时又出现了代码通用性的问题,发现五维时存在多处三角形的各顶点几乎位于同一直线的情况,对判断质心与直线关系的方程引入一个很小的Δoffest解决此问题

最后写了透明材质,为了方便和实际效果没有对透明材质计算光照,透明物体代码比不透明的简单,但确实便利了理解内部结构变化

透明四维
透明五维

以下是最终的源码,重要参数全部在define或全局变量中

后记:突然发现有一处用了public做了变量名/捂脸,但是C语言没有class,所以那里的public是指模型的公共顶点

以上代码只是看起来比较好看,以下是以下是带注释与测试代码的源码,环境是win,linux的话把清屏部分的代码稍微改改即可,可以参考前文提到的之前的博客Render 3D Object In Terminal

Comments

2021-04-24

⬆︎TOP