У меня есть две точки (назовем их pointA и pointB) типа SCNVector3. Я хочу провести между ними линию. Похоже, это должно быть легко, но не может найти способ сделать это.
Я вижу два варианта, у обоих есть проблемы:
Используйте 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" слишком мала, вы не видите линию вообще. Как бы то ни было, это технически прямоугольник, а не линия, для которой я собирался, что может привести к небольшим графическим сбоям, если я хочу нарисовать несколько связанных строк.