2016-12-09 2 views
1

나는 cylinder, box ...와 같은 간단한 논리를 따르려고했지만, textNode의 위치를 ​​정의하는 것만으로는 작동하지 않습니다.SceneKit을 사용할 때 특정 위치에 텍스트를 배치하는 방법은 무엇입니까?

func makeText(text3D: String, position: SCNVector3, depthOfText: CGFloat, color: NSColor, transparency: CGFloat) -> SCNNode 
{ 
    let textTodraw = SCNText(string: text3D, extrusionDepth: depthOfText) 
    textTodraw.firstMaterial?.transparency = transparency 
    textTodraw.firstMaterial?.diffuse.contents = color 
    let textNode = SCNNode(geometry: textTodraw) 
    textNode.position = position   
    return textNode 
} 
+0

질문을 명확히하고 함수 호출 방법을 추가하십시오. abd 화요일 텍스트 추가 – ColdSteel

+1

예상 결과와 실제 결과가 무엇인지 자세히 설명해 주시겠습니까? – mnuages

+1

당신의 질문이 실제로 잘못되어 가고있는 것에 대해 꽤 모호하기 때문에 ... 그러나 글꼴 크기의 "포인트"는 3D 좌표 공간의 단위와 같습니다. [기본 글꼴은 36pt입니다.] (https://developer.apple.com/reference/scenekit/scntext/1523273-font), 나머지 장면이 3-4 단위 넓이라면, 그냥 카메라 밖의 거대한 편지가 되십시오. – rickster

답변

6

SCNText의 기본 글꼴 36 point Helvetica이며, 글꼴 크기의 "점"장면 공간의 단위와 동일합니다. (글쎄, SCNText 지오메트리가 포함 된 노드의 로컬 공간입니다. 노드에 축척 비율을 설정하지 않으면 로컬 공간 단위가 장면 공간 단위와 동일합니다.) 즉, 짧은 레이블조차도 수십 단위가 될 수 있습니다. 높이와 수백 와이드 단위.

작은 범위로 SceneKit 장면을 만드는 것이 일반적입니다. 예를 들어 SCNBox, SCNSphere 등의 기본 크기를 사용하여 스위프트 놀이터에서 함께 던질 수있는 간단한 테스트 장면은 3-4 단위 만 가능할 수 있습니다. (ARKit에서 SceneKit을 사용하는 경우 장면 단위는 미터이므로 36 "포인트"글꼴의 일부 텍스트는 시내 사무실 블록의 크기입니다.)

또한 텍스트 기하 도형의 기준점 그 노드를 포함하는 노드는 텍스트의 왼쪽 하단에있다. 이 모든 것을 합치면 나머지 장면들 위에 커다란 문자들이 어렴풋이 보일뿐 카메라 뷰에서 그냥 숨어있을 가능성이 있습니다. 당신이 당신의 SCNText에 훨씬 더 작은 글꼴을 설정하여이 문제를 해결하려고하면 텍스트가 들쭉날쭉하고 두툼한 얻을 수 있다는


참고. flatness 속성이 텍스트의 포인트 크기에 비례하여 측정되기 때문입니다 (정확하게 말하면 하나의 단위가 텍스트 크기의 한 포인트 인 좌표 시스템에서 측정 됨). 따라서 화면/인쇄 표준으로는 작을 글꼴 크기를 선택하면 flatness의 크기를 줄이면서 편지에서 매끄러운 곡선을 유지해야합니다.

또는 글꼴 크기와 평탄도를 그대로 둘 수 있습니다. 대신 문자 지오메트리가 포함 된 노드에 scale 인수를 설정하거나 해당 노드의 내용을 축소하는 변환 행렬에 해당 노드의 pivot을 설정할 수 있습니다. 예를 들어, 배율 인수를 1/72로 설정하면 장면 공간의 한 단위는 텍스트 높이의 한 "인치"(72 포인트)와 동일합니다 - 장면의 다른 크기에 따라 약간의 차이가있을 수 있습니다 2D에서하는 것처럼 글꼴 크기를 더 쉽게 생각할 수 있습니다.