【发布时间】:2014-03-20 02:55:50
【问题描述】:
我有两个 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”太小,您根本看不到这条线。事实上,从技术上讲,它是一个矩形,而不是我想要的线,如果我想绘制多条连接线,这可能会导致小的图形故障。
【问题讨论】:
-
这可能对你有帮助:ronnqvi.st/custom-scenekit-geometry
-
万岁!一个 SceneKit 问题!
-
说真的,SceneKit 太棒了,我不知道为什么越来越多的人不使用它。这是我的第一个 Objective-C 项目/应用程序(尽管我第二次尝试这样做),鉴于我完全没有 OpenGL 背景,SceneKit 让我的事情变得如此简单。希望它最终会被移植到 iOS 上,并且会看到更多的使用......
-
天哪!我什至没有时间回家回答这个问题:(
-
该死,我只想从 A 点到 B 点画一条 3D 线。
标签: objective-c macos cocoa opengl scenekit