2017-12-27 46 views
0

私はAppleのARKitを使ってARアプリケーションを作っています。私はボックスのワイヤフレームのアウトラインを作りたいと思います。コードに記載され、図に示されているものは、ボックスの各面に斜辺を描きます。また、ボックスの反対側に角を隠します。 Scene Kitに対角線を取り除いて、ボックスを透明にしてすべての辺と頂点を表示できるようにする方法がありますか?対角線のないSCNBoxのエッジを描く?

let box:SCNNode = SCNNode(geometry: SCNBox(width: CGFloat(0.1), height: CGFloat(0.1), length: CGFloat(0.1), chamferRadius: CGFloat(0))) 
box.geometry?.firstMaterial?.fillMode = .lines 
box.geometry?.firstMaterial?.diffuse.contents = UIColor.green 

Current SCNBox

答えて

3

私は斜線を取り除く方法についてはよく分かりません。

しかし、材料を両面に設定すると、ボックスの反対側に線が引かれます。

box.geometry?.firstMaterial?.isDoubleSided = true 

編集:(は!それらの斜線を取り除く)

ここであなたが望むものを達成するための別のアプローチだ

enter image description here

let sm = "float u = _surface.diffuseTexcoord.x; \n" + 
    "float v = _surface.diffuseTexcoord.y; \n" + 
    "int u100 = int(u * 100); \n" + 
    "int v100 = int(v * 100); \n" + 
    "if (u100 % 99 == 0 || v100 % 99 == 0) { \n" + 
    " // do nothing \n" + 
    "} else { \n" + 
    " discard_fragment(); \n" + 
    "} \n" 

let box = SCNBox(width: 0.1, height: 0.1, length: 0.1, chamferRadius: 0) 

box.firstMaterial?.emission.contents = UIColor.green 

box.firstMaterial?.shaderModifiers = [SCNShaderModifierEntryPoint.surface: sm] 

box.firstMaterial?.isDoubleSided = true 
+0

すてきな回答!ちょうどこれを行うためのよりクリーンな方法があったと思う。スウィフトは私がそう簡単にはしない。 – Miket25

+0

ありがとうございます。もう少し簡単な解決法が提供されていないことは恥ずかしいことだと同意する。 – Ash

1

あなたはSCNBoxSCNGeometryオブジェクトを作成すると作成されたジオメトリは12の三角形で構成され、fillModeをに設定すると、SceneKitはこれらの三角形のそれぞれのエッジを描画します。つまり、SCNBoxを呼び出した後にジオメトリを変更したり、カスタムジオメトリを作成したりして、SceneKitに描画するラインを正確に伝えない限り、それらの対角線を取り除くことはできません。