You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在SceneKit中通过半径与原点参数绘制圆形节点?

SceneKit 圆形节点绘制方案

SceneKit 原生就支持绘制自定义半径、自定义原点位置的圆形节点,不需要引入额外第三方库,根据使用场景选下面两种实现方式即可:

实现方式

  • 快速生成3D空间通用圆形节点
    用内置的SCNCylinder圆柱几何是最简便的方案:把圆柱高度设为视觉可忽略的极小值,传入指定半径就能得到正圆形面片,几何默认锚点就在圆心位置,直接把节点坐标设为你需要的原点即可。
    核心代码(Swift):

    // 替换为你实际需要的半径、原点坐标参数
    let targetRadius: CGFloat = 1.5
    let originCoordinate = SCNVector3(0, 2, -3)
    
    // 生成圆形几何,高度设为0.001不产生厚度视觉
    let circleGeo = SCNCylinder(radius: targetRadius, height: 0.001)
    // 如果需要正反两面都可见就开启双面渲染,不需要可以关闭节省性能
    circleGeo.firstMaterial?.isDoubleSided = true
    // 需要线框圆形而非填充圆形的话,打开下面这行配置
    // circleGeo.firstMaterial?.fillMode = .lines
    
    // 创建节点并设置位置
    let circleNode = SCNNode(geometry: circleGeo)
    circleNode.position = originCoordinate
    
    // 添加到场景
    sceneView.scene.rootNode.addChildNode(circleNode)
    
  • 自定义平面圆形(适合2D场景、特殊轮廓需求)
    如果需要圆形完全贴合指定平面、或者要做镂空、自定义分段等特殊效果,可以用UIBezierPath绘制圆形路径后,通过SCNShape生成几何。
    核心代码(Swift):

    let targetRadius: CGFloat = 1.5
    let originCoordinate = SCNVector3(0, 2, -3)
    
    // 绘制以路径原点为圆心的正圆
    let circlePath = UIBezierPath(
        arcCenter: .zero,
        radius: targetRadius,
        startAngle: 0,
        endAngle: .pi * 2,
        clockwise: true
    )
    // 挤出极小厚度生成平面几何
    let circleGeo = SCNShape(path: circlePath, extrusionDepth: 0.001)
    let circleNode = SCNNode(geometry: circleGeo)
    circleNode.position = originCoordinate
    
    sceneView.scene.rootNode.addChildNode(circleNode)
    

补充小技巧:如果需要圆形节点始终朝向屏幕相机(比如做场景标记点),直接给节点添加SCNBillboardConstraint约束即可,不需要手动计算旋转角度。

内容的提问来源于stack exchange,提问作者Joice George

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 08:09:20