【发布时间】:2018-08-14 05:19:25
【问题描述】:
我从 Sketchfab 下载了两个不同的 3D 模型。我在 ARKit 3D 对象放置中导入了两个模型。放置 3D 模型时,节点未与其中一个模型的操纵器正确对齐。 我附上了截图。
左侧是所选节点(视口)和操纵器正确对齐的位置。 但右侧所选节点(视口)和操纵器未正确对齐。 如何使节点和操纵器像左侧 3D 模型一样与中心对齐。请指导我。谢谢
@乔什·罗宾斯
我已经尝试过你的代码,但我仍然遇到同样的问题。
box.firstMaterial?.emission.contents = UIColor.green
box.firstMaterial?.shaderModifiers = [SCNShaderModifierEntryPoint.surface: sm]
box.firstMaterial?.isDoubleSided = true
let boxNode = SCNNode(geometry: box)
boxNode.position = SCNVector3(node.position.x,(node.position.y + Float((proheights * 0.0234)/2)),node.position.z)
let minimum = float3(treenode.boundingBox.min)
let maximum = float3(treenode.boundingBox.max)
let translation = (maximum - minimum) * 0.5
//3. Set The Pivot
treenode.pivot = SCNMatrix4MakeTranslation(translation.x, translation.y, translation.z)
boxNode.pivot = SCNMatrix4MakeTranslation(translation.x, translation.y, translation.z)
self.addChildNode(boxNode)
更新代码
let treenode = SCNNode()
let box = SCNBox(width: (prowidths * 0.0234), height: (proheights * 0.0234), length: (prolenght * 0.0234), chamferRadius: 0)
box.firstMaterial?.emission.contents = UIColor.green
box.firstMaterial?.shaderModifiers = [SCNShaderModifierEntryPoint.surface: sm]
box.firstMaterial?.isDoubleSided = true
let boxNode = SCNNode(geometry: box)
boxNode.position = SCNVector3(treenode.position.x,(treenode.position.y + Float((proheights * 0.0234)/2)),treenode.position.z)
let minimum = float3(treenode.boundingBox.min)
let maximum = float3(treenode.boundingBox.max)
let translation = (maximum - minimum) * 0.5
//3. Set The Pivot
treenode.pivot = SCNMatrix4MakeTranslation(translation.x, translation.y, translation.z)
boxNode.pivot = SCNMatrix4MakeTranslation(translation.x, translation.y, translation.z)
self.addChildNode(boxNode)
self.addChildNode(treenode)
return treenode
【问题讨论】:
-
为什么要放在中间?在应用程序中,您只需要树而不是洞场景。所以当您添加树时,如果它在中心则无关紧要。如果它在中心,位置将与位置相同。出于任何原因,如果要将其移动到中心,则必须从右侧菜单中将位置 x 更改为 - 某个数字..
-
@ Βασίλης Δ 当我尝试将对象放置在平面中(触摸位置)时。对象被放置在夏天的其他位置。同时,当我尝试旋转对象时,对象和操纵器正在单独关闭对象。如果我尝试更改 x 的节点位置,则节点对象和操纵器都在移动。如何解决它.. 谢谢
-
因此,如果我很好地理解了您的问题,您已经激活了平面检测,并且您希望将 SCNNodes 添加到您在检测到的平面中进行的触摸位置的检测到的平面中,它应该在检测到的平面。我会写给你答案的代码,因为它很大
-
@ Βασίλης Δ 我更新了我的问题截图。请检查一下。谢谢
-
你能写出初始化变量框和节点的代码吗?
标签: ios swift scenekit arkit 3d-model