SceneKit中的复杂形状

时间:2015-10-22 07:20:30

标签: objective-c macos 3d scenekit

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

if (data == "admin") {
    window.location.href = "<?php echo base_url(); ?>dashboard";
} else {
    window.location.href = "<?php echo base_url(); ?>index";
}

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

box

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

我该怎么做呢?我知道可以通过定义带有Bézier曲线的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 (与SCNShape结合使用)。如果我想将一组顶点加载到几何体中并将其作为材质,我该怎么做?

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

1 个答案:

答案 0 :(得分:4)

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

您的正确之处在于,对于简单形状,您可以使用Scene Kit基本几何图形(方框,球体等)或带有SCNShape的{​​{1}}进行具有斜面和倒角的3D挤压。对于更复杂的几何形状,您有几个选择:

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

此类软件最适用于复杂的几何图形,如关卡,角色和场景。虽然导入后它确实具有相当不动的缺点,因为每个网格看起来都是一样的,例如,如果你创建一块岩石作为一块风景,你将需要创建许多岩石的变化,或者让你游戏中的每一块石头看起来都一模一样。

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

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

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

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