如何在SCENEKIT中绘制无限长的线?
How to draw infinitely long line in SCENEKIT?
我想像 SketchUp 中那样绘制无限长的轴。我已经画了固定长度的线,但我想要它无限长。
根据您的意思的上下文,您检查线条的大小何时即将穿过屏幕中的某个 x 或 y 轴。您可以使用 size.frame 检测屏幕的大小。或者,您可以使用 CGRectGetMidX、CGRectGetMidY 等。
例如,我会这样做:
var x = CGRectGetMaxX(self.frame)
//Where y is the max size of the line you have
if x <= y {
//Code where you make the line shape extend or add another line over it to make it look continous
}
用固定长度的线来伪造它,这些线从相机的视野之外(称为平截头体)延伸,穿过它,然后再次超出它。
您可以为每个轴创建开始和结束 SCNNode
实例。然后每次相机改变它的视图时,调用
func isNodeInsideFrustum(_ node: SCNNode,
withPointOfView pointOfView: SCNNode) -> Bool
在您的 6 个端点中的每一个上。如果端点在截锥体内,则将其移得更远,直到不在为止。
SCNSceneRendererDelegate
协议中的方法可能对您有所帮助。
我想像 SketchUp 中那样绘制无限长的轴。我已经画了固定长度的线,但我想要它无限长。
根据您的意思的上下文,您检查线条的大小何时即将穿过屏幕中的某个 x 或 y 轴。您可以使用 size.frame 检测屏幕的大小。或者,您可以使用 CGRectGetMidX、CGRectGetMidY 等。
例如,我会这样做:
var x = CGRectGetMaxX(self.frame)
//Where y is the max size of the line you have
if x <= y {
//Code where you make the line shape extend or add another line over it to make it look continous
}
用固定长度的线来伪造它,这些线从相机的视野之外(称为平截头体)延伸,穿过它,然后再次超出它。
您可以为每个轴创建开始和结束 SCNNode
实例。然后每次相机改变它的视图时,调用
func isNodeInsideFrustum(_ node: SCNNode,
withPointOfView pointOfView: SCNNode) -> Bool
在您的 6 个端点中的每一个上。如果端点在截锥体内,则将其移得更远,直到不在为止。
SCNSceneRendererDelegate
协议中的方法可能对您有所帮助。