ios - 对象不使用三角形和坐标渲染/绘制,SceneKit

标签 ios objective-c swift scenekit scnnode

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

func test()
{
    var cubeSide:Float = 15.0;
    var halfSide:Float = cubeSide/2;

    var positions:[SCNVector3] = [
        SCNVector3Make(-halfSide, -halfSide,  halfSide),
        SCNVector3Make( halfSide, -halfSide,  halfSide),
        SCNVector3Make(-halfSide, -halfSide, -halfSide),
        SCNVector3Make( halfSide, -halfSide, -halfSide),
        SCNVector3Make(-halfSide,  halfSide,  halfSide),
        SCNVector3Make( halfSide,  halfSide,  halfSide),
        SCNVector3Make(-halfSide,  halfSide, -halfSide),
        SCNVector3Make( halfSide,  halfSide, -halfSide)
    ];

    var indices:[Int] = [
        0, 2, 1,
        1, 2, 3,
        // back
        2, 6, 3,
        3, 6, 7,
        // left
        0, 4, 2,
        2, 4, 6,
        // right
        1, 3, 5,
        3, 7, 5,
        // front
        0, 1, 4,
        1, 5, 4,
        // top
        4, 5, 6,
        5, 7, 6
    ];

    var geometrySource = SCNGeometrySource(vertices: positions, count: 8)

    var data = NSData(bytes: indices, length: sizeof(Int) * indices.count)

    var element = SCNGeometryElement(data: data, primitiveType: SCNGeometryPrimitiveType.Triangles, primitiveCount: 12, bytesPerIndex: sizeof(Int))

    var geometry = SCNGeometry(sources: [geometrySource], elements: [element])
    geometry.materials?.first?.diffuse.contents = UIColor.redColor()

    var node = SCNNode(geometry: geometry)

    /*var cameraNode:SCNNode = SCNNode()
    cameraNode.camera = SCNCamera()
    cameraNode.position = SCNVector3Make(0, 12, 30);
    self.rootNode.addChildNode(cameraNode);*/

    self.rootNode.addChildNode(node)
}

但是屏幕是空的: IPad emulator

如果我根据已知的图形创建几何图形,则一切正常。代码示例:

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)
}

它看起来如何: IPad emulator

我以为问题出在相机节点上,但我做了很多操作,但没有任何改变。更改节点位置也没有帮助。另外,如果我创建一个新的 Xcode 项目,其部署目标是 OS X,它也可以工作。但我需要一个适用于 iOS 的解决方案。

我错了什么,我做错了什么?

最初我的问题是我无法从解析的 .STL 文件中绘制 3D 模型。我认为问题出在解析上,但后来我尝试使用原始类型 - 三角形及其位置来绘制任何内容,但它不起作用。

最佳答案

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

SceneKit: error, C3DRendererContextBindMeshElement unsupported byte per index (8)

改用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)

关于ios - 对象不使用三角形和坐标渲染/绘制,SceneKit,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32838886/

相关文章:

android - QuickBlox:发送消息不会在具有相同登录名的其他设备上更新

ios - 自定义导航栏后退按钮点击区域

ios - 内存不足时性能低下 - Swift

ios - 参数键有方括号 Alamofire iOS

ios - 屏幕上 UIViews 的分页 - Swift

ios - 如何从应用程序中识别 Enterprise(公司)iOS 设备?

ios - 为离线/断开连接保存花名册提议

iphone - 核心数据 - 保存关系的技术?

ios - UIslider 缩略图不是从头开始的

ios - 在 Swift 中从 HealthKit 读取血型、年龄、性别等