gpt4 book ai didi

objective-c - SceneKit——在两点之间画一条线

转载 作者:太空狗 更新时间:2023-10-30 03:13:20 24 4
gpt4 key购买 nike

我有两个 SCNVector3 类型的点(我们称它们为 pointA 和 pointB)。我想在它们之间划清界限。看起来应该很容易,但找不到方法。

我看到两个选项,都有问题:

  • 使用小半径的 SCNCylinder,长度为 |pointA-pointB|然后定位/旋转它。

  • 使用自定义 SCNGeometry 但不确定如何使用;也许必须定义两个三角形来形成一个非常细的矩形?

似乎应该有一种更简单的方法来做到这一点,但我似乎找不到。

编辑:使用三角形方法可以在 (0,0,0) 和 (10,10,10) 之间画一条线:

CGFloat delta = 0.1;
SCNVector3 positions[] = { SCNVector3Make(0,0,0),
SCNVector3Make(10, 10, 10),
SCNVector3Make(0+delta, 0+delta, 0+delta),
SCNVector3Make(10+delta, 10+delta, 10+delta)};
int indicies[] = {
0,2,1,
1,2,3
};

SCNGeometrySource *vertexSource = [SCNGeometrySource geometrySourceWithVertices:positions count:4];
NSData *indexData = [NSData dataWithBytes:indicies length:sizeof(indicies)];
SCNGeometryElement *element = [SCNGeometryElement geometryElementWithData:indexData primitiveType:SCNGeometryPrimitiveTypeTriangles primitiveCount:2 bytesPerIndex:sizeof(int)];
SCNGeometry *line = [SCNGeometry geometryWithSources:@[vertexSource] elements:@[element]];

SCNNode *lineNode = [SCNNode nodeWithGeometry:line];
[root addChildNode:lineNode];

但是有问题:由于法线,你只能从一侧看到这条线!从另一边是看不见的。另外,如果“delta”太小,你根本看不到这条线。事实上,它在技术上是一个矩形,而不是我想要的线,如果我想绘制多条连接线,这可能会导致小的图形故障。

最佳答案

这是 Swift 中的一个简单扩展:

extension SCNGeometry {
class func lineFrom(vector vector1: SCNVector3, toVector vector2: SCNVector3) -> SCNGeometry {
let indices: [Int32] = [0, 1]

let source = SCNGeometrySource(vertices: [vector1, vector2])
let element = SCNGeometryElement(indices: indices, primitiveType: .Line)

return SCNGeometry(sources: [source], elements: [element])

}
}

关于objective-c - SceneKit——在两点之间画一条线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21886224/

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