簡體   English   中英

在 Scenekit 中加載大尺寸 .obj 模型。 如何在scenekit中自動調整模型?

[英]Load Big size .obj model in Scenekit. How to Autoresize model in scenekit?

我正在 Scenekit 中加載一個 .obj 模型。 當我嘗試加載像(水瓶)這樣的小模型時,效果很好。 但是當我嘗試加載更大的模型(如沙發、桌子)時,它加載完美,但超出了場景的邊界。

在Scenekit中有什么方法,我們可以在scenekit中加載模型,無論模型有多大。 它應該正確地安裝在場景中。 請查看附加的屏幕截圖以獲得更好的主意。

讓我知道,如果你能給我一些調整它的提示。

 let url = "https://s3.ap-south-1.amazonaws.com/p9-platform/product/ccbb5daa-982d-4fa1-b475-971453534686.obj"

 let asset = MDLAsset(url: url as URL)
 let scene = SCNScene(mdlAsset: asset)
 let mesh = asset.object(at:0) as! MDLMesh
 let vertexBuffer = mesh.vertexBuffers[0]
 let descripter = mesh.vertexDescriptor
 let submeshes = mesh.submeshes



 for index in 0...(submeshes?.count)! - 1{
    let submesh0 = submeshes![index] as! MDLSubmesh
    let singleMesh = MDLMesh(vertexBuffer: vertexBuffer, vertexCount: mesh.vertexCount, descriptor: descripter, submeshes:  [submesh0])
    let geometry = SCNGeometry(mdlMesh: singleMesh)
    let Node = SCNNode(geometry: geometry)
    let submeshname = submesh0.material?.name as! String
    let materialname = "_\(submeshname)" as! String
    let nodename = submesh0.name as! String
    let revisedName = nodename.replacingOccurrences(of: materialname, with: "")
    Node.name = revisedName
    scene.rootNode.addChildNode(Node)
 }

在此處輸入圖片說明

在此處輸入圖片說明

SCNNode具有縮放屬性。 我以前遇到過這個問題,基本上只有在 Maya 或 Blender 等程序中創建模型時才會發生。 作者把它做得很大,以便他們可以使它更詳細和復雜。

無論如何,您可以嘗試的是:

Node.scale = SCNVector3(0.001, 0.001, 0.001)

Node也不應該以大寫字母開頭^_____^

您可以檢查此網格的邊界框。 然后你會知道最大點和最小點,從而你知道它有多大。

然后,您可以計算一個比例值來幫助您縮放網格。

if let object = asset.object(at: 0) as? MDLMesh {
                    
    let node = SceneComplex.shared.object
    node.geometry = SCNGeometry(mdlMesh: object)
    
    let (minB, maxB) = node.boundingBox
    let diff = maxB.x - minB.x
    let scale = 10.0 / diff // A good scale value depends on many factors
    
    node.scale = SCNVector3(scale, scale, scale)
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM