玩Tesserxel(零):全新四维引擎上线

由于4DViewer代码混乱且计算截面在CPU端性能低下,今年7月底我决定尝试使用新技术WebGPU API重新实现四维渲染引擎,因为WebGPU的计算着色器可以让截面计算也放在GPU中,彻底解决性能问题,于是新项目——Tesserxel诞生了。Tesserxel取的是单词Tesseract(四维立方体的拉丁词根tessera“四”)和Pixel(像素)。

Tesserxel自带的示例库截图

目前Tesserxel实现了以下功能:

  1. 包含四维向量、二向量、四元数表示的旋量与图形学需要的矩阵运算的数学库。
  2. 基于四面体的光栅化渲染器,该渲染器仅底层封装,需用户自己创建着色器管线、GPU缓存资源等。
  3. 子模块Four能够帮用户隐藏底层渲染逻辑,类似于3D渲染中的ThreeJs库那样通过声明几何体、相机、材质、灯光来快速构建渲染四维场景。
  4. 四维刚体物理引擎。
  5. 用户键鼠交互系统封装。

下面就让我们进入Tesserxel构建的四维世界。这里是示例场景库链接(注意要启用WebGPU才打得开)

https://wxyhly.github.io/tesserxel/examples/

请参考玩Tesserxel后续系列文章中的教程深入了解Tesserxel的玩法哦~

注意:现在电脑端直接更新至谷歌浏览器最新版(版本号113及以上)即可打开,以下内容已经过时。

启用WebGPU方法: WebGPU是一个实验性的API,是WebGL的未来“接班人”,它的标准还处于W3C的草稿阶段,未正式发布。目前据说仅Windows下Chrome提供较好支持,而且想开启这项功能还有点麻烦,首先你需要下载Canary版本的Chrome浏览器(谷歌官网,或自行找下载资源),添加–enable-unsafe-webgpu参数启动浏览器,打开chrome://flags/,将WebGPU Developer Features打开(选Enabled)就可以启用WebGPU。
开启WebGPU的操作步骤

目前的Tesserxel只是一个早期版本,后续会补充Tesserxel说明手册,继续开发更多物理解算、高级材质、离线渲染,以及基于Tesserxel引擎的4D游戏等。(但愿不鸽~)

自己打造的一个电脑钢琴

  怎么用电脑键盘来弹钢琴?其实这种电脑钢琴软件很多,比如我之前接触过EveryOnePiano,比较出名的还有FreePiano。当然我们也可以自己做一个类似的东西,我的在线钢琴没有取名字,Github仓库名称我索性用了EveryOnePiano的缩写EOP。

这里是链接,点开即玩(ie浏览器是不可能支持滴!)

  大致的使用方法可以在点开后的菜单条的“?”查看(不详细,最好还是看本文后面给的例子哦),点击键盘,屏幕上会显示一个虚拟电脑键盘,上面将标出每个键的音名、唱名或功能(按住Ctrl、Shift、Alt后会有对应的功能快捷组合键)。本文也有一部分的使用说明,但侧重记录我对它的想法与实现过程。
  对了,如果你是手机用户,点击键盘可以模拟电脑键盘,再点一次键盘可以模拟钢琴键盘,类似“完美钢琴”那种手机App哦!

电脑键盘如何弹钢琴

Read More

代数拓扑简介(上):同伦论

注:这篇文章不需要读者有专业的拓扑学基础,可能一听到“代数”就给人一种抽象难以理解的感觉,因此本文更多希望从直觉上让大家感受一下代数拓扑中的同伦、同调是什么,具体正式定义和技术细节可以在任意一本代数拓扑的书上找到哦。

目录

Read More

四维空间(十二):解开球面结

# 本文是《四维空间(十):扭结与环扣》的续集,本内容对空间想象力要求较高,可能有些地方难以理解,但全文没有任何公式,只涉及几何,不涉及代数,适合挑战空间想象力哦。
# 我发现不仅是我,网上“扭结”与“纽结”全都在混用,那我也懒得改了。

在本系列的上上篇文章中我们知道了四维空间中的二维曲面打结现象与各式各样的孔、环扣等,上次对二维曲面结的介绍其实也不算太详细,只给出了一些非平凡的管状结作为例子,今天我们要从另一个角度来分析扭结。本文的主要内容来自于这个Youtube视频这篇论文,它介绍了通过旋转三叶结的方式来构造同胚于球面的结(即允许自相交的话能把这个结恢复成球面),并且证明了有些是真正无法解开的结,另一些是能够通过一些步骤解开成球面,下面我们也来试试解一解高维空间当中的结!

旋转球面结交线展开图

本文目录:

Read More

四维空间(十一):几何代数、四元数与空间旋转

#警告:本文内容超级进阶,可以说大概包括四维欧几里得空间的所有基础的代数理论了,本文重代数轻几何,所以可能不太好理解
这篇文章将会介绍一种新的可以“统一天下”高维几何的代数系统:几何代数(Geometric Algebra),因为在这个代数体系下包含了标量、向量、多维向量以及各种内积外积混合积,甚至囊括到了旋量(就是让电子转两圈才一样的罪魁祸首)、空间旋转、复数与四元数,矢量场中的各种导数算子,甚至几何代数还能给行列式一个新的定义……

引子

我们在探讨四维空间中的磁场时提到过两个2-向量之间的三种乘法运算:

运算 $e_{ij}*e_{ij}$ $e_{ij}*e_{jk}$ $e_{ij}*e_{kl}$
内积$\cdot$ 1 0 0
混合积$\times$ 0 $e_{ik}$ 0
外积$\wedge$ 0 0 $e_{ijkl}$

当时说感觉上是相同字母可以合并相消,不同字母则直接写在一起构成一个多维向量,这样组合下来每一种n-向量刚好对应一种乘法运算。我们不妨规定一种新乘法运算来同时满足上述条件。为了和内积外积区别,新的乘法不用任何符号表示:

  • 对于向量$\boldsymbol v$,我们规定$\boldsymbol v^2=\boldsymbol v \boldsymbol v=||\boldsymbol v||$。这是内积的定义。
  • 然后我们“强行”把外积的定义也搬进来:对于相互垂直的向量$\boldsymbol u$与$\boldsymbol v$,我们规定$\boldsymbol u \boldsymbol v = -\boldsymbol v \boldsymbol u$。
  • 我们再规定这种乘法的结合律、左右分配律对任意k-向量$\boldsymbol A$、$\boldsymbol B$都成立:$(\boldsymbol A \boldsymbol B) \boldsymbol C = \boldsymbol A (\boldsymbol B \boldsymbol C) $,$(\boldsymbol A+ \boldsymbol B) \boldsymbol C = \boldsymbol A \boldsymbol C +\boldsymbol B \boldsymbol C $,$\boldsymbol A( \boldsymbol B+ \boldsymbol C) = \boldsymbol A \boldsymbol B +\boldsymbol A \boldsymbol C $。

这个新的乘法就是几何积。为了统一,我们规定标量是0-向量。

Read More

四维世界(七):电磁学

/** 这篇文章我打算专注一下四维世界(四维空间+一维时间=五维时空)里的物理学——电磁学。这些都是假设这个世界也符合我们世界中的一些物理规律的理论推导。虽然它电磁学不像牛顿力学那么容易让人接受,但这个类比也是无瑕兹而且很自然的(你也可以认为一切都是扯淡)。我们不讨论量子力学等其他物理,因为它们在四维空间中的推广有严重问题。 **/

在我们的三维世界,最神奇的东西之一就是电磁场了,各种电磁感应现象都是立体的,还要用到空间里的右手定则,能不能把这些东西类比到四维空间呢?当然可以。读者只要学过中学物理即可阅读除最后一节外的所有内容,如果知道大学物理和经典的不涉及相对论的麦克斯韦方程就可以全文阅读(我们本文也只考虑四维空间中的低速的非相对论物理过程,其实相对论也能推广到五维时空),其实不清楚也没关系,我会带着大家先过一遍(物理复习-_-)。我们先从最简单的两个相距为$r$的静电荷受的力说起吧。

目录

Read More

Minecraft4D 教程

(这篇文章只是一个教程,所以没放进四维世界系列)
Minecraft4D是一个真正的四维空间中的(超立方体)方块沙盒游戏。(如果把时间也算上,就是五维时空!)现在游戏只支持创造模式下的单人游戏。Minecraft4D采用Javascript与Webgl编写,所以只需点开下面的链接就可以玩了。(最好用Google Chrome浏览器,不保证其他浏览器的兼容性,需要使用电脑键盘操作)

Minecraft4D

进入后等待贴图与地形都加载好后就可以看到视野了。你会发现画面分成了几乎一样的左右两个,它们是左右眼的成像用来产生双眼立体视觉,我不会做VR,所以就只有要求你要会做对对眼(斗鸡眼)来看到立体视野画面。如果做不到的话就只有通过按方向键旋转视野以得到立体感了。这篇文章里有详细介绍怎么看这种三维的画面。角落处三个小视图分别是立体视野的截面,单独抽出来以便我们清楚观察。

Read More

四维世界(六):牛顿力学

这个系列一直都在设想一个虚构的四维世界。无论我们怎样用语言描述它的样子,缺乏物理学的世界都是静态的不能交互的。所以今天我们来学习一下这个世界里的牛顿力学。这个世界的构建理念就是要尽可能接近我们的真实世界,只是在维度上不同,所以我们全盘照搬三维世界中的理论就行了。仿照三维的游戏物理引擎我们也能写一个四维物理引擎。比如Marc ten Bosch的4D Toys就相当不错,但游戏里只能固定移动截胞(2024更新:貌似后面作者加入了旋转截面功能),且不能自定义场景,所以我又自己造轮子写了一个。

先睹为快

如果你还不知道什么是3D视野的话,请先看教程再回来哦:

这里有很多四维物理场景(以后可能还会增加),你可以自由旋转角度观察场景。但遗憾的是除了可以按鼠标右键发射超球炮弹之外,我没想出更好的与物体交互的方法。(最好看后面的讲解获得更好的体验哦

正24胞体骰子(右键发射炮弹)

四维积木块(右键发射炮弹)

四维汽车(请看后面操作方法)

四维物体滚动与陀螺(多场景可选)

球环-球环链(一动就会脱)
球环-环球链
球环-双圆环链
环球-双圆环链
双圆环-双圆环链(一大一小)

四维齿轮(控制面板可调转速)
绝对垂直的齿轮相互传动
双旋转合成器

Read More