【问题标题】:ARKit – Rendering a 3D object under an invisible planeARKit – 在不可见平面下渲染 3D 对象
【发布时间】:2019-02-07 15:55:58
【问题描述】:

我有一个带有不可见 SCNPlane 的 ARKit 场景:

plane.geometry?.firstMaterial?.colorBufferWriteMask = []

此平面放置在地面上,用于从放置在场景中的其他对象渲染deferred shadows

我想渲染另一个SCNPlane,它应该与不可见平面处于同一水平(相同的Z-坐标)。问题是,每次新对象在不可见平面下时,它根本不会被渲染。

物体在不可见平面下时,有什么方法可以渲染它?

【问题讨论】:

    标签: swift scenekit augmented-reality arkit


    【解决方案1】:

    您可以使用以下代码行来实现它:

    shadowsPlane.geometry?.materials.first?.writesToDepthBuffer = true
    shadowsPlane.geometry?.materials.first?.readsFromDepthBuffer = true
    

    .colorBufferWriteMask 选择两个实例属性之一:

    shadowsPlane.geometry?.materials.first?.colorBufferWriteMask = []
    

    为您的对象设置渲染顺序,例如:

    shadowsPlane.renderingOrder = -1   // the nearest layer
    

    当然,使用适当的 .lightingModel 实例属性:

    shadowsPlane.geometry?.materials.first?.lightingModel = .constant 
    

    请记住,两架飞机之间会有一些微小的气隙:

    shadowsPlane.position = SCNVector3(x: 0, y: 0, z: 0)
    floorPlane.position = SCNVector3(x: 0, y: -0.01, z: 0)
    

    【讨论】:

    • 我快到了。渲染顺序 + .alpha 做到了。我必须为最远的层(不可见平面下的对象)设置 -1,为不可见平面本身设置 100。现在效果很好。
    猜你喜欢
    • 2018-06-29
    • 1970-01-01
    • 2023-03-10
    • 1970-01-01
    • 2020-12-19
    • 1970-01-01
    • 2019-08-05
    • 2018-03-21
    • 2021-07-08
    相关资源
    最近更新 更多