タイプ SCNVector3 の 2 つのポイント (pointA と pointB と呼びましょう) があります。私はそれらの間に線を引きたい。簡単なように思えますが、それを行う方法が見つかりません。
2 つのオプションが表示されますが、どちらにも問題があります。
半径が非常に小さく、長さが |pointA-pointB| の SCNCylinder を使用します。配置/回転します。
カスタム SCNGeometry を使用しますが、方法がわかりません。おそらく非常に薄い長方形を形成するには、2 つの三角形を定義する必要がありますか?
これを行う簡単な方法があるはずですが、見つけられないようです。
編集:三角形の方法を使用すると、(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];
しかし、問題があります。法線が原因で、この線は片側からしか見えません! 向こうからは見えません。また、「デルタ」が小さすぎると、線がまったく見えなくなります。そのままでは、技術的には、目的の線ではなく長方形であり、複数の結合された線を描画したい場合、小さなグラフィックの不具合が発生する可能性があります.