我想要capture一个真实世界的纹理,并将其应用于在激光雷达扫描仪的帮助下生成的 3D 网格。我想应该使用 Projection-View-Model 矩阵。纹理必须从固定的视点制作,例如,从房间的中心。但是,如果我们可以应用environmentTexturing作为cube-map场景中的纹理收集的数据,这将是一个理想的解决方案。
看看3D 扫描仪应用程序。这是一个参考应用程序,允许我们导出带有纹理的模型。
我需要通过一次迭代来捕获纹理。我不需要实时更新它。我意识到改变 PoV 会导致错误的纹理感知,换句话说,纹理失真。我也意识到 RealityKit 中有一个动态细分,并且有一个自动纹理 mipmapping(纹理的分辨率取决于它捕获的距离)。
import RealityKit
import ARKit
import MetalKit
import ModelIO
class ViewController: UIViewController, ARSessionDelegate {
@IBOutlet var arView: ARView!
override func viewDidLoad() {
super.viewDidLoad()
arView.session.delegate = self
arView.debugOptions.insert(.showSceneUnderstanding)
let config = ARWorldTrackingConfiguration()
config.sceneReconstruction = .mesh
config.environmentTexturing = .manual
arView.session.run(config)
}
}
Run Code Online (Sandbox Code Playgroud)
我希望能够从 iPad Pro 激光雷达导出网格和纹理。
这里有如何导出网格的示例,但我也希望能够导出环境纹理
ARKit 3.5 – 如何使用 LiDAR 从新 iPad Pro 导出 OBJ?
ARMeshGeometry 存储网格的顶点,是否必须在扫描环境时“记录”纹理并手动应用它们?
这篇文章似乎展示了一种获取纹理坐标的方法,但我看不到使用 ARMeshGeometry 做到这一点的方法:将 ARFaceGeometry 保存到 OBJ 文件
任何指向正确方向的点,或要看的东西,非常感谢!
克里斯
iOS 12应用程序现在允许我们创建一个ARReferenceObject,并使用它可以可靠地识别实际对象的位置和方向。我们也可以保存完成的.arobject文件。
但是:
ARReferenceObject仅包含ARKit识别实际对象所需的空间特征信息,而不是该对象的可显示3D重建。
sceneView.session.createReferenceObject(transform: simd_float4x4,
center: simd_float3,
extent: simd_float3) {
(ARReferenceObject?, Error?) in
// code
}
func export(to url: URL, previewImage: UIImage?) throws { }
Run Code Online (Sandbox Code Playgroud)
有没有一种方法可以让我们.arobject使用Poisson Surface Reconstruction或从文件中重建数字3D几何(低多边形或高多边形)Photogrammetry?