SceneKit中的自定义几何

作为高级3D渲染框架,SceneKit允许我们通过简单地从3D建模软件导入3D对象来渲染它们。 它具有一些内置的原始形状( SCNPlaneSCNBoxSCNSphere等),使我们能够以非常简单的方式在屏幕上绘制3D几何形状。 然后,我想知道是否有可能以编程方式生成自定义几何,因为我觉得在可视化复杂数据方面可能很有用。

在SceneKit的文档中,答案是肯定的,可以通过SCNGeometrySourceSCNGeometryElement 。 这让我很兴奋,所以我继续上网,发现了一个简单的几何图形,而八面体的SceneKit并没有提供这种几何图形(就像两个金字塔粘合在一起)。

在3D计算机图形学中,3D对象通常由多个三角形表面组成。 我们将需要两组数据来绘制这些曲面,它们是3D对象角(也称为顶点)的位置以及将这些顶点连接以创建三角形曲面的序列。

在编写代码之前,让我们取一个八面体,并为其每个顶点赋予一个从零开始的数字。 当我们稍后在代码中定义顶点时,顶点0将是第一个顶点,顶点1将是第二个顶点,依此类推。 接下来,确定3D空间中所有顶点的坐标。 我估计了如下图所示的坐标,您可以将它们调整为任意的值。

接下来,我们需要定义八面体的表面,这也是这些顶点之间的连接顺序。 由于八面体的所有表面均为三角形,因此我们不必将表面分解为多个三角形。 但是,定义序列可能会有些棘手,因为大部分时间只绘制表面的一侧(正面)。 因此,如果您看着表面的背面,它将是透明的。 您可能会问SceneKit如何知道哪一侧是正面。 好吧,我们通过定义序列的方式告诉它。 如果曲面的顶点是正面,则以逆时针顺序定义。 因此,您将获得如下序列:

如果顺序不同,也可以,只要按逆时针顺序定义曲面即可。