试图弄清楚我如何创建一个SCNGeometry与多边形作为primitiveType,我的目标是添加多边形形状的节点作为一个球体节点的子节点,并使其看起来像MKPolygonMap工具包,like in this example。
的数据
我现在的代码是:
//Take an arbitrary array of vectors
let vertices: [SCNVector3] = [
SCNVector3Make(-0.1304485, 0.551937, 0.8236193),
SCNVector3Make(0.01393811, 0.601815, 0.7985139),
SCNVector3Make(0.2971005, 0.5591929, 0.7739732),
SCNVector3Make(0.4516893, 0.5150381, 0.7285002),
SCNVector3Make(0.4629132, 0.4383712, 0.7704169),
SCNVector3Make(0.1333823, 0.5224985, 0.8421428),
SCNVector3Make(-0.1684743, 0.4694716, 0.8667254)]
//Does polygon shape require indices?
let indices: [Int] = [0,1,2,3,4,5,6]
let vertexSource = SCNGeometrySource(vertices: vertices)
let indexData = Data(bytes: indices, count: indices.count * MemoryLayout<Int>.size)
//Note!!! I get compiler error if primitiveCount is greater than 0
let element = SCNGeometryElement(data: indexData, primitiveType: .polygon, primitiveCount: 0, bytesPerIndex: MemoryLayout<Int>.size)
let geometry = SCNGeometry(sources: [vertexSource], elements: [element])
let material = SCNMaterial()
material.diffuse.contents = UIColor.purple.withAlphaComponent(0.75)
material.isDoubleSided = true
geometry.firstMaterial = material
let node = SCNNode(geometry: geometry)
字符串
当像这样使用SCNGeometryElement时,我得到一个空节点。
1条答案
按热度按时间qncylg1j1#
你有两个问题:
[Int32]
。SCNGeometryPrimitiveTypePolygon
(仅存在于Objective-C中)的文档中可以看到:元素的data属性会保留两个值序列。
您需要将索引数组更改为:
字符串
然后,将
primitiveCount
设置为1(我们有一个多边形要绘制)并更改缓冲区的大小:型