나는 실린더, 상자와 같은 간단한 논리를 따르려고 노력했다. 그래서 textNode의 위치를 정의하는 것만으로도 작동하지 않는다.
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
}
의 기본 글꼴 SCNText
은 36 포인트 Helvetica 이고 글꼴 크기의 "포인트"는 장면 공간 단위와 동일합니다. (글쎄요, SCNText
지오메트리가 포함 된 노드의 로컬 공간입니다 .하지만 노드에 축척 계수를 설정하지 않은 경우 로컬 공간 단위는 장면 공간 단위와 동일합니다.) 즉, 짧은 레이블도 수십 단위의 높이가 될 수 있습니다. 그리고 폭이 수백 단위입니다.
그것은 작은 범위를 빌드 SceneKit 장면에 대한 일반의 - 예를 들어, 같은 간단한 테스트 장면은 스위프트 함께 던질 수있는 놀이터의 기본 크기를 사용 SCNBox
, SCNSphere
등 넓은 3-4 단위 수 있습니다. (ARKit과 함께 SceneKit을 사용하는 경우 장면 단위는 미터이므로 36 "포인트"글꼴의 일부 텍스트는 시내 몇 개의 사무실 블록 크기입니다.)
또한 포함 노드에 상대적인 텍스트 지오메트리의 앵커 포인트는 텍스트의 왼쪽 아래 모서리에 있습니다. 이 모든 것을 합치면 나머지 장면에 거대한 글자가 나타나 카메라 시야 밖에 숨겨져있을 수 있습니다.
에 훨씬 더 작은 글꼴을 설정하여이 문제를 해결하려고 SCNText
하면 텍스트가 들쭉날쭉하고 뭉툭해질 수 있습니다. 이는 flatness
속성이 텍스트의 포인트 크기를 기준으로 측정 되기 때문입니다 (보다 정확하게는 1 단위 == 텍스트 크기의 1 포인트 인 좌표계에서 측정 됨). 따라서 화면 / 인쇄 표준에 따라 작은 글꼴 크기를 선택하는 경우 flatness
글자의 부드러운 곡선을 얻으려면 그에 따라 크기를 줄여야합니다 .
또는 글꼴 크기와 평탄도를 그대로 둘 수 있습니다. 대신 scale
텍스트 지오메트리가 포함 된 노드에 요소를 설정하거나 해당 노드의 pivot
내용을 축소하는 변환 행렬로 설정합니다 . 예를 들어, 축척 비율을 1/72로 설정하면 장면 공간의 한 단위는 텍스트 높이의 "인치"(72 포인트)와 동일합니다. 장면의 다른 크기에 따라 약간의 오차가 발생할 수 있습니다. 2D 에서처럼 글꼴 크기를 더 쉽게 생각할 수 있습니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다