ios - 糟糕的缩放渲染 ARKit
问题描述
我正在使用 ARKit 和 SceneKit 进行透视测试。这个想法是在地面上显示平面 3D 模型时改进 3D 渲染。我已经为另一个几乎解决的透视问题开了一张票。(ARKit 透视渲染)
但是,在我的大量测试/3D 显示之后,我注意到有时当我锚定一个 3D 模型时,它的大小可能会有所不同......(宽度和长度)我通常显示一个 16 米长和 1.5 米宽的 3D 模型. 你可以想象这会扭曲我的渲染。我不知道为什么我的显示器在 3D 模型尺寸方面可能会有所不同。也许它来自跟踪和我的测试环境。
下面是我用来将 3D 模型添加到场景中的代码:
func renderer(_ renderer: SCNSceneRenderer, didAdd node: SCNNode, for anchor: ARAnchor) {
guard let imageAnchor = anchor as? ARImageAnchor else { return }
let referenceImage = imageAnchor.referenceImage
let imageAnchorPosition = imageAnchor.transform.columns.3
print("Image detected")
let modelName = "couloirV2"
//let modelName = "lamp"
guard let object = VirtualObject
.availableObjects
.filter({ $0.modelName == modelName })
.first else { fatalError("Cannot get model \(modelName)") }
print("Loading \(object)...")
self.sceneView.prepare([object], completionHandler: { _ in
self.updateQueue.async {
// Translate the object's position to the reference node position.
object.position.x = imageAnchorPosition.x
object.position.y = imageAnchorPosition.y
object.position.z = imageAnchorPosition.z
// Save the initial y value for slider handler function
self.tmpYPosition = object.position.y
// Match y node's orientation
object.orientation.y = node.orientation.y
print("Adding object to the scene")
// Prepare the object
object.load()
// Show origin axis
object.showObjectOrigin()
// Translate on z axis to match perfectly with image detected.
var translation = matrix_identity_float4x4
translation.columns.3.z += Float(referenceImage.physicalSize.height / 2)
object.simdTransform = matrix_multiply(object.simdTransform, translation)
self.sceneView.scene.rootNode.addChildNode(object)
self.virtualObjectInteraction.selectedObject = object
self.sceneView.addOrUpdateAnchor(for: object)
}
})
}
解决方案
推荐阅读
- c# - 在控制台应用程序中跨项目访问的值
- r - R将布局对象的网格单位转换为本机
- python - 没有传递参数的 Lambda 函数
- azure - 液体模板转换在 Azure 逻辑应用中不起作用
- android - Gradle 构建在 Cloud Endpoints 的 generateClientLibs 处失败
- mysql - 如何使用 shell 脚本在 Amazon RDS MySql 数据库中运行 .SQL 文件
- excel - (VBA)如何删除重复的行并将相应的值求和到右列?
- flask - 解析一列的内容,并使用烧瓶和烧瓶迁移将结果插入另一列
- android - Android Studio 模拟器无法在 Windows 7 上运行
- pagination - 当我在同一html页面中的表格和表格之间切换时,材料表分页不会