2015-01-28 1 views
2

, 난 선을 그리는 코드 아래에 노력하고 베 지어 패스와 SCNShape,내가 Scenekit 아이폰 OS에서 3D 라인을 그릴 묶는하고

func path() -> UIBezierPath 
    { 
     var bPath = UIBezierPath() 
     bPath.moveToPoint(CGPointMake(0, 0)) 
     bPath.addLineToPoint(CGPointMake(10, 10)) 
     bPath.addLineToPoint(CGPointMake(5, 5)) 
     bPath.closePath() 
     return bPath 
    } 

하고 아래의 코드는, SCNNode의 라인을로드

입니다
let sap = SCNShape() 
    sap.path = path() 
    let carbonNode = SCNNode(geometry: sap) 
    carbonNode.position = SCNVector3Make(0, 0, 15) 
    scene.rootNode.addChildNode(carbonNode) 

하지만 빈 화면이 나타납니다.

답변

3

지오메트리의 재질을 변경해보십시오. 흰색 배경에 흰색 물체가있을 수 있습니다.

편집 : 또한 삼각형의 정점이 동일 직선임을 알 수 있습니다. 따라서 당신은 타락한 삼각형으로 끝납니다.

+0

재료 색상을 변경했지만 작동하지 않습니다. – user2781412

+0

정점이 동일 선상에 있고 삼각형이 평평합니다. – mnuages

3

경로가 (0,0)부터 시작하여 (10, 10)에 그리고 두 번째 줄이 (5,5)로 이미 그려져 있으므로 (0, 0) 및 (10, 10)이다. 그런 다음 다른 선을 그려 (0,0) 경로를 닫습니다.

세 점 중 하나를 변경하면 표면적이있는 경로가 생성됩니다.

또한 z 축은 화면을 가리 킵니다. 즉, 카메라의 위치에 따라 카메라 뒤에 carbonNode를 배치 할 수 있습니다. 대신 장면에 더 많이 배치하려는 경우 음수 인 z 값을 사용해야합니다.

+0

장면에 카메라를 수동으로 추가하지 않으면 SceneKit에서 자동으로 카메라를 배치하고 장면 내용의 전체 경계 상자를 표시하도록 구성합니다. OP가 카메라를 배치했다면 'dnono'는 'carbonNode.position'이 문제가 될 수도 있고 아닐 수도 있습니다. – rickster

2

다음은이 문제를 해결하기 위해 작성한 코드입니다.

// Material colors 
    let cyanMaterial = SCNMaterial() 
    cyanMaterial.diffuse.contents = UIColor.cyanColor() 

    let anOrangeMaterial = SCNMaterial() 
    anOrangeMaterial.diffuse.contents = UIColor.orangeColor() 

    let aPurpleMaterial = SCNMaterial() 
    aPurpleMaterial.diffuse.contents = UIColor.purpleColor() 

    // A bezier path 
    let bezierPath = UIBezierPath() 
    bezierPath.moveToPoint(CGPointMake(-0.25, 0)) 
    bezierPath.addLineToPoint(CGPointMake(0, -0.25)) 
    bezierPath.addLineToPoint(CGPointMake(0.25, 0)) 
    bezierPath.addLineToPoint(CGPointMake(0, 0.25)) 
    bezierPath.closePath() 

    // Add shape 
    let shape = SCNShape(path: bezierPath, extrusionDepth: 0.75) 
    shape.materials = [cyanMaterial, anOrangeMaterial, aPurpleMaterial] 
    let shapeNode = SCNNode(geometry: shape) 
    shapeNode.position = SCNVector3(x: 0.2, y: 0.75, z: 0.1); 
    self.rootNode.addChildNode(shapeNode) 
    shapeNode.rotation = SCNVector4(x: -1.0, y: -1.0, z: 0.0, w: 0.0) 

장면 키트 눈금은 미터 단위입니다. 따라서 숫자를 다른 모양을 만들 때와 비슷한 숫자로 설정하십시오.

+0

SceneKit 단위는 물리 시스템 작업을 시작할 때만 (따라서 질량과 가속 사이의 관계로 작업해야하는 경우에만) "미터"이거나 다른 응용 프로그램에서 사용하기 위해 파일 형식으로 내보낼 수 있습니다 현실 세계 공간 (예 : 아키텍처 또는 3D 인쇄)에 관심이 있습니다. 그렇지 않으면 임의적이고 확장 가능합니다. 아마도 베 지어 경로를 만드는 데 사용하는 2D 점은 장면의 3D 공간과 동일한 축척에 있다고 말할 수 있습니다. (실수로 그들을 "픽셀"이라고 생각하는 것이 훨씬 쉽습니다.) – rickster

관련 문제