Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 对象未使用三角形和坐标进行渲染/绘制,SceneKit_Ios_Objective C_Swift_Scenekit_Scnnode - Fatal编程技术网

Ios 对象未使用三角形和坐标进行渲染/绘制,SceneKit

Ios 对象未使用三角形和坐标进行渲染/绘制,SceneKit,ios,objective-c,swift,scenekit,scnnode,Ios,Objective C,Swift,Scenekit,Scnnode,问题是,如果我使用此构造函数init(sources:[AnyObject],elements:[AnyObject]?)创建scngometry,我将无法渲染任何内容。下面是一个示例(这将绘制一个立方体,取自此立方体): 但屏幕只是空的: 如果我从已知图形创建几何图形,一切都正常。代码示例: func showCone() { var radius:CGFloat = 1.0 let cone = SCNCone(topRadius: 0.1, bottomRadius:

问题是,如果我使用此构造函数
init(sources:[AnyObject],elements:[AnyObject]?)创建
scngometry
,我将无法渲染任何内容。
下面是一个示例(这将绘制一个立方体,取自此立方体):

但屏幕只是空的:

如果我从已知图形创建几何图形,一切都正常。代码示例:

func showCone()
{
    var radius:CGFloat = 1.0

    let cone = SCNCone(topRadius: 0.1, bottomRadius: 3, height: 2)
    cone.firstMaterial?.diffuse.contents = UIColor.redColor()

    let coneNode = SCNNode(geometry: cone)
    coneNode.position = SCNVector3(x: 4.0, y: 3.0, z: 20.0)

    self.rootNode.addChildNode(coneNode)
}
它看起来是什么样子:

我原以为问题出在相机节点上,但我做了很多操作,什么都没有改变。更改节点
位置也无济于事。另外,如果我创建一个新的Xcode项目,它也可以工作,部署目标是OSX。但是我需要一个针对iOS的解决方案

我犯了什么错,我做错了什么


最初我的问题是我无法从解析的
.stl
文件中绘制三维模型。我原以为问题是解析,但后来我尝试使用基本类型绘制任何东西-三角形及其位置,但没有成功。

SceneKit不处理
Int
索引,因为它们的值可能太大。您应该在控制台中看到这一点:

SceneKit:错误,每个索引(8)不支持C3DRENERContextBindMeshElement字节

改用
UInt8

 var indices:[UInt8] = ...
还请注意,在Swift中,有一个帮助器用于构建几何图元。 下面几行

var data = NSData(bytes: indices, length: sizeof(Int) * indices.count)
var element = SCNGeometryElement(data: &data, primitiveType: .Triangles, primitiveCount: 12, bytesPerIndex: sizeofValue(indices[0]))
变成

var element = SCNGeometryElement(indices: indices, primitiveType: .Triangles)

我已将类型更改为UInt8,现在出现错误“c3drenderContextSetupResidentMeshSourceAtLocation-不支持双精度”。顺便说一句,您没有得到关于helper答案的第二部分,因为如果我像您那样编写,这只是一个编译错误。位置和法线源应该从浮点数组(
[Float]
)创建。至于方便的方法,请确保您使用的是最新的工具链(Xcode 7.0.1)。非常感谢您,实际上代码是正确的,但我使用的是Xcode 7.0版,更新后一切正常:)
var element = SCNGeometryElement(indices: indices, primitiveType: .Triangles)