SceneKit –在3D对象上绘图

钱丹·谢蒂(Chandan Shetty SP)

我创建了示例应用程序以在3d对象上进行绘制,输出图形不平滑(如图所示)。我花了将近一天的时间来弄清仍然无法解决的问题。可能是什么问题?在此处输入图片说明

我正在创建如下的自定义工程图几何

//I am creating self.drawingNode touches begin and adding to the rootnode
//points are nothing but 2d points from touches

func createGeometryForPoints(points:[CGPoint]) -> SCNGeometry {

    var all_3d_points:[SCNVector3] = []

    for point in points {

        let result = self.get3dPoint(point)

        if result.1 == true {
            all_3d_points.append(result.0)
        } else {
            print("INVALID POINT")
        }
    }

    var indices: [Int32] = []
    var index:Int32 = 0

    var previousIndex:Int32 = -1

    for _ in all_3d_points {

        if(previousIndex != -1) {

            indices.append(previousIndex)
        }
        indices.append(index)
        index = index + 1
        previousIndex = index
    }

    if indices.count > 0 {
        indices.removeLast();
    }

    let indexData = NSData(bytes: indices, length: sizeof(Int32) * indices.count)

    let source = SCNGeometrySource.init(vertices: all_3d_points, count: all_3d_points.count)
    let element = SCNGeometryElement.init(data: indexData, primitiveType: .Line, primitiveCount: indices.count/2, bytesPerIndex: sizeof(Int32))

    let line = SCNGeometry(sources: [source], elements: [element])
    line.materials.first?.diffuse.contents = UIColor.redColor()
    line.materials.first?.doubleSided = true

    return line
}

func get3dPoint(point:CGPoint) -> (SCNVector3,Bool) {

    var canAdd = false
    let scnView = self.view as! SCNView
    var unprojectedStartPoint = SCNVector3.init(x:Float(point.x), y:Float(point.y), z:0)

    let hitResults = scnView.hitTest(point, options: nil)
    if hitResults.count > 0 {

        let result: AnyObject! = hitResults[0]
        if hitResults.count > 1 {
            print("SOME PROBLEM")
        }
        unprojectedStartPoint = result.localCoordinates
        unprojectedStartPoint = result.node.convertPosition(unprojectedStartPoint, toNode: self.drawingNode!)

        canAdd = true
    }

    return (unprojectedStartPoint,canAdd)
}

编辑

我正在考虑找到与摄像机方向或法线方向相同的偏移量,因为我是Scenekit的新手,所以我没有获得如何将此偏移量添加到绘图节点的信息,因此在此方向上寻求帮助

func createMarkup() -> Void {   
    let drawingNode = SCNNode()
    drawingNode.renderingOrder = 1000
    self.parentNode!.addChildNode(drawingNode)
    let geometry = self.createGeometryForPoints(allPoints,node: drawingNode)
    drawingNode.geometry = geometry
    drawingNode.geometry?.materials.first?.doubleSided = true
}

编辑:2

通过在命中测试的法线上添加较小的偏移量来解决此问题

let offsetToAvoidFlickering: Float = 0.05
unprojectedStartPoint = unprojectedStartPoint + result.localNormal.normalized() * offsetToAvoidFlickering
固体像素

我怀疑您有深度精度问题;看起来您的直线部分已被裁剪,因为它们与球体的相交部分相交。尝试在禁用深度测试的情况下画线。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

SceneKit –在3D对象上绘图

来自分类Dev

使用SceneKit在3D空间中旋转SCNode对象

来自分类Dev

SceneKit和COLLADA对象

来自分类Dev

SceneKit和COLLADA对象

来自分类Dev

如何根据SceneKit中的某些变量控制3D对象的位置(或旋转)?

来自分类Dev

Swift 3 - SceneKit 获取 3d 模型比例值

来自分类Dev

如何在Scenekit中使用3D模型?

来自分类Dev

Scenekit检测用户点击的对象

来自分类Dev

Scenekit检测用户点击的对象

来自分类Dev

在两点之间绘制SceneKit对象

来自分类Dev

在SceneKit中为对象着色等于什么?

来自分类Dev

如何防止对象在scenekit中投射阴影?

来自分类Dev

Scenekit Pan 2D仅水平翻译为正交3D

来自分类Dev

在球面SceneKit上写文本吗?

来自分类Dev

iPad Air 2上的SceneKit崩溃

来自分类Dev

SceneKit场景被装在较大的屏幕上

来自分类Dev

在SceneKit中绘制3D弧线和螺旋线

来自分类Dev

我可以为SceneKit使用哪些3D建模程序?

来自分类Dev

使用粒子系统爆炸3D文本(Swift-SceneKit)

来自分类Dev

Scenekit节点在3D空间中的旋转和移动

来自分类Dev

在SceneKit中加载巨大的动画3D模型会导致内存问题

来自分类Dev

SceneKit和Swift的3D地球大小调整和缩放问题

来自分类Dev

如何只允许3D模型的X轴旋转?(SceneKit)

来自分类Dev

如何在 iOS 中使用 Scenekit 保存 3D 场景?

来自分类Dev

Accelerate / Scenekit框架:: 3d和4d向量的数学矩阵/向量库在哪里?

来自分类Dev

将SpriteKit SKScene overlaySKScene中的2D点映射到SceneKit SCNScene中的3D点

来自分类Dev

更改SCNText节点对象的颜色或纹理(Swift-Scenekit)

来自分类Dev

SceneKit:将节点与模型对象相关联

来自分类Dev

如何在SceneKit SWIFT中添加对象

Related 相关文章

热门标签

归档