[英]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.