首页 文章

SceneKit 中的复杂形状

提问于
浏览
1

在 SceneKit 中,程序员可以通过输入以下代码来创建 node/object:

SCNBox* box = [SCNBox boxWithWidth:1 height:1 length:1 chamferRadius:0.1]; // define a geometry
SCNNode* boxNode = [SCNNode nodeWithGeometry:box]; // make this geometry into a 3D node
[scene.rootNode addChildNode:boxNode]; // add the node into the scene

你得到一个盒子节点,测量 1x1x1 单位,具有 0.1 倒角半径。它看起来几乎像一个圆圈。

框

但是,我想渲染一个比盒子,球体或圆柱体更复杂的形状。例如,我想在屏幕上渲染一个拼图。

我该怎么做呢?我知道通过定义带有 Bézier 曲线的SCNShape(与NSBezierCurve组合)是可能的。如果我想将一组顶点加载到几何体中并将其作为材质,我该怎么做?

我是 3D 编程的新手。我以前用球体和简单的形状搞砸了。我可能会以一种不正确的方式将拼图块渲染到屏幕上。

1 回答

  • 4

    目前Scene Kit仅用于渲染几何体,并且具有非常有限的几何生成工具,尽管Model I/O的引入似乎是支持更复杂的 3D 建模功能的第一步。

    你是正确的,对于简单的形状你可以使用Scene Kit基本几何(框,球 etc.)或带有NSBezierCurveSCNShape用于带有斜面和倒角的 3D 挤压。对于更复杂的几何,你有几个选择:

    第三方 3D 建模软件可用于创建几何图形,在某些情况下可用于直接导入Scene Kit的动画。很多人似乎都使用 Sketchup,因为它免费且易于使用。它对基本形状有好处,但其功能非常有限。我建议使用 Blender,它也是免费的,但还有很多东西可以创建几何和网格,还可以创建可以直接导入的动画和材质。它确实有一个陡峭的学习曲线,但一旦你有它破解它是一个很大的资产。

    这种软件最适用于复杂的几何形状,如关卡,人物和风景。它确实有一个缺点,即在导入时相当,因为每个网格看起来都是一样的,例如,如果你创建一块岩石作为一块风景,你将需要创建许多岩石的变化,或者每一个在你的游戏中看起来相同的摇滚

    使用SCNGeometrySourceSCNGeometryElement类在 Scene Kit中生成它。这些基本上是 3D 空间中的一系列点(每个点SCNVector3),用于定义网格的角或顶点。然后,通过将点放入数组并定义哪些点应连接在一起以构成网格的三角形或元素,将它们连接到网格中。这是另一个SCNVector3向量数组,其中向量的每个部分指向顶点数组中的索引。 [11]的向量将在数组索引 0,1 和 2 中的点中创建一个三角形。有关于如何执行此操作的教程

    这样做的好处是能够创建随机几何,通过创建一组伪随机点,然后组合它们来创建网格。然后,您可以使用Model I/O烘焙环境遮挡(假设 Apple 修复了此问题,我没有检查过)并继续使用Model I/O来创建非常逼真的材质。这意味着你可以有效地创造你想要的任何东西。继上一个示例之后,您可以在程序上生成彼此看起来不同的岩石。您可以使用它来生成几乎无限数量的拼图可能性。

    作为旁注,几何和材料在 3D 建模中是两个不同的东西,并且正如您刚刚开始的那样,您似乎已将它们混合在您的问题中。几何是定义对象形状的网格,而材质定义光与该网格交互以产生其最终外观的方式。几何体可以附加一种或多种材料,以产生您想要的结果。

    您选择的选项实际上取决于您想要达到的目标。对于随机性,第二种选择更好,因为质量第一选择是最好的。我觉得我现在有点胡扯,所以我会在这里结束。

相关问题