2017-06-29 25 views
6

Tôi đã quản lý để có được một khối lập phương (SCNNode) được đặt trên một bề mặt mà máy ảnh được chỉ, tuy nhiên tôi thấy rất khó để làm đơn giản (?) Nhiệm vụ cũng đặt văn bản ở cùng vị trí.ARKit: Đặt một SCNText tại một điểm cụ thể phía trước máy ảnh

Tôi đã tạo SCNText và SCNNode tiếp theo, tuy nhiên khi tôi thêm nó vào rootNode, văn bản dường như luôn được thêm phía trên đầu và tắt camera ở bên phải (cho tôi biết điểm gốc toàn cục).

Ngay cả khi tôi sử dụng cùng một giá trị chính xác của vị trí tôi đã sử dụng cho khối lập phương, nút SCNText vẫn được đặt phía trên đầu của tôi ở cùng một vị trí.

Xin lỗi nếu đây là câu hỏi cơ bản, tôi chưa bao giờ làm việc trong SceneKit trước đây.

Trả lời

12

Trung tâm tọa độ cho một SCNGeometry là điểm trung tâm của nó. Nhưng khi bạn đang tạo một điểm SCNText trung tâm nằm đâu đó ở góc dưới bên trái:

Center point for a box

Center point for text

Bạn cần phải tập trung các văn bản đầu tiên. Điều này có thể được thực hiện bằng cách kiểm tra hộp bounding của nút chứa văn bản của bạn và thiết lập một trục chuyển để thay đổi trung tâm văn bản đến trung tâm thực tế của nó:

func center(node: SCNNode) { 
    let (min, max) = node.boundingBox 

    let dx = min.x + 0.5 * (max.x - min.x) 
    let dy = min.y + 0.5 * (max.y - min.y) 
    let dz = min.z + 0.5 * (max.z - min.z) 
    node.pivot = SCNMatrix4MakeTranslation(dx, dy, dz) 
} 

Edit:

Cũng lưu ý this answer giải thích một số cạm bẫy bổ sung: Văn bản có kích thước phông chữ 16 pts là 16 đơn vị SceneKit cao. Nhưng trong ARKit 1 SceneKit units = 1 mét!

+0

bất kỳ ý tưởng nào về cách thực hiện điều này trong obj-c? –

Các vấn đề liên quan