在Scenekit中创建自定义几何体

时间:2018-03-31 04:47:53

标签: ios scenekit

我无法显示自定义几何体。当我调试它时,所有变量似乎都保存正确的数据,但没有任何渲染。我现在设置它尝试渲染一个由两个三角形组成的单个方块进行非常简单的测试,但仍然没有运气。我觉得我正在构建错误的SCNGeometry。完成所有逻辑/循环/魔术后,我有以下内容:

var verts = SCNGeometrySource(vertices: meshVertices)
var norms = SCNGeometrySource(normals: normals)
var element = SCNGeometryElement(indices: triangleIndices, primitiveType: .triangles)

我已经尝试了以下两种方法来创建SCNGeometry。尽管showStatistics确实指出有两个三角形,但都没有渲染任何东西。奇怪的是,当我触摸屏幕试图移动相机时,三角形总数会跳到2.74K ......

let newGeo = SCNGeometry(sources: [verts, norms], elements: [element])

-

var sources = [SCNGeometrySource]()
sources.append(verts)
sources.append(norms)
let newGeo = SCNGeometrySource(sources: sources, elements: [element])

除非我完全误解了某些内容,否则我真的不确定下一步该尝试什么。

要确认,这是我在变量中的数据:

meshVertices = ([SCNVector3])
    [0]: x = (Float) 0, y = (Float) 0, z = (Float) 0
    [1]: x = (Float) 1, y = (Float) 0, z = (Float) 0
    [2]: x = (Float) 0, y = (Float) 1, z = (Float) 0
    [3]: x = (Float) 1, y = (Float) 1, z = (Float) 0

normals = ([SCNVector3])
    [0]: x = (Float) 0, y = (Float) 0, z = (Float) 1
    [1]: x = (Float) 0, y = (Float) 0, z = (Float) 1
    [2]: x = (Float) 0, y = (Float) 0, z = (Float) 1
    [3]: x = (Float) 0, y = (Float) 0, z = (Float) 1

triangleIndices = ([Int])
    [0]: 3
    [1]: 2
    [2]: 0
    [3]: 3
    [4]: 0
    [5]: 1

我没有问题让SCNPlane,SCNBox或其他东西渲染,所以我不认为问题存在。问题似乎在于我如何创建几何体。我很确定我的顶点,法线和索引是正确的,所以在尝试创建由SCNGeometrySource和SCNGeometryElement组成的最终SCNGeometry对象时,我一定做错了。

1 个答案:

答案 0 :(得分:0)

尽管可能为时已晚。希望这个答案也能帮助其他人。

在指定索引时,请不要使用Int类型。似乎在使用SceneKit时(或者也许它更像Metal / OpenGL之类的东西?我不确定),Int类型并未考虑在内。请在此处使用UInt32UInt8作为索引。