gpt4 book ai didi

swift - 如何在 Swift 中使用 Bezier 路径连接 3D 空间中的两个 SCNSphere?

转载 作者:行者123 更新时间:2023-11-30 13:32:46 54 4
gpt4 key购买 nike

我有以下代码:

    func createScene(){
count += 1

let sphereGeom = SCNSphere(radius: 1.5)
sphereGeom.firstMaterial?.diffuse.contents = UIColor.redColor()
let path = UIBezierPath()
path.moveToPoint(CGPoint(x: 0, y: 0))

let radius = 3.0
var radians = Double(0)
var yPosition = Float(5.4)

while count <= 20 {

if radians >= 2{
radians -= 2
}

let sphereNode = SCNNode(geometry: sphereGeom)
let angle = Double(radians * M_PI)

let xPosition = Float(radius * cos(angle))
let zPosition = Float(radius * sin(angle))

sphereNode.position = SCNVector3(xPosition, yPosition, zPosition)

let cgX = CGFloat(xPosition)
let cgY = CGFloat(yPosition)

path.addQuadCurveToPoint(CGPoint(x: cgX, y: cgY), controlPoint: CGPoint(x: (cgX / 2), y: (cgY / 2)))
path.addLineToPoint(CGPoint(x: (cgX - (cgX * 0.01)), y: cgY))
path.addQuadCurveToPoint(CGPoint(x: 1, y: 0), controlPoint: CGPoint(x: (cgX / 2), y: ((cgY / 2) - (cgY * 0.01))))

let shape = SCNShape(path: path, extrusionDepth: 3.0)
shape.firstMaterial?.diffuse.contents = UIColor.blueColor()
let shapeNode = SCNNode(geometry: shape)
shapeNode.eulerAngles.y = Float(-M_PI_4)
self.rootNode.addChildNode(shapeNode)

count += 1
radians += 0.5556
yPosition -= 1.35

self.rootNode.addChildNode(sphereNode)

}

我想添加一条贝塞尔曲线路径,将每个球体连接到下一个球体,从而创建一个沿着螺旋线向下延伸的螺旋线。由于某种原因,当我添加此代码时,形状甚至没有出现。但是当我使用较大的 x 和 y 值时,我看到的路径很好,但它无法定向到球体的大小。我不明白为什么当我尝试缩小它时它会消失。

最佳答案

您的 SCNShape 永远不会被挤压。根据苹果文档,

An extrusion depth of zero creates a flat, one-sided shape.

随着 X/Y 值的增大,您的平面形状会变得可见。不过,您无法使用 SCNShape 构建 3D 螺旋:挤出的起始平面和终止平面是平行的。

您必须使用自定义几何体,或使用一系列细长的 SCNBox 节点来近似螺旋。我敢打赌有人知道如何使用着色器来做到这一点。

关于swift - 如何在 Swift 中使用 Bezier 路径连接 3D 空间中的两个 SCNSphere?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36393001/

54 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com