【问题标题】:Complex shapes in SceneKitSceneKit 中的复杂形状
【发布时间】:2016-01-21 09:31:02
【问题描述】:

在 SceneKit 中,程序员可以通过输入以下代码来创建节点/对象:

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。它看起来几乎像一个圆圈。

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

我该怎么做呢?我知道可以通过定义带有贝塞尔曲线的SCNShape(结合NSBezierCurve)来实现。如果我想将一组顶点加载到几何体中并将其作为材质,我该怎么做?

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

【问题讨论】:

    标签: objective-c macos 3d scenekit


    【解决方案1】:

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

    您是正确的,对于简单的形状,您可以使用 Scene Kit 基本几何图形(盒子、球体等)或 SCNShapeNSBezierCurve 用于带有斜角和倒角的 3D 挤压。对于更复杂的几何形状,您有几个选择:

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

    这类软件最适合用于关卡、人物、风景等复杂几何图形。但是,它确实有一个缺点,即一旦导入就相当不动态,因为每个网格看起来都一样,例如,如果您创建一块岩石作为风景,您将需要创建许多岩石的变化,或者让游戏中的每块石头看起来都一样。

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

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

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

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

    【讨论】:

    • 感谢您的详细解答!我有一个朋友知道如何使用 Blender,但我想知道是否可以使用 SceneKit 生成基于 3D 点的模型。我不知道您提到的课程;这会有很大帮助! ?
    猜你喜欢
    • 2017-08-26
    • 2019-07-23
    • 2015-08-20
    • 2011-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-07
    相关资源
    最近更新 更多