Quantcast
Channel: Recent Questions - Stack Overflow
Viewing all articles
Browse latest Browse all 12111

Add blur transition as skybox Entity is removed or added for Vision Pro

$
0
0

I'm trying to build a small Vision app similar to Zillow's immersive home tour. I'm using an UnlitMaterial and adding a static image texture as the material color. If a user changes the room I remove the old skybox entity in the RealityView update closure and replace it with a new one as I want them to remain in the full immersion but just change the texture. I tried adding animation / transition modifiers to the view but so far unsuccessful. In the update closure since that is what is triggered when the user makes a change I tried to retrieve the old entity and modify the texture to the image but also been unsuccessful. Is my architecture incorrect to achieve this?

Question:Is it possible to add a blur transition when adding or removing entities to the content within RealityView similar to the blur found in Zillow's immersive app as a user changes rooms?

struct ImmersiveView: View {    @Binding var selectedRoom: String    var body: some View {        RealityView { content in            guard let skybox = createSkybox() else { return }            content.add(skybox)        } update: { content in            let _ = print(content.entities[0])            // remove previous entities            content.entities.removeAll()            // add a new skybox            guard let skybox = createSkybox() else { return }            content.add(skybox)        }    }    private func createSkybox () -> Entity? {        // create mesh        let skyBoxMesh = MeshResource.generateSphere(radius: 1000)        // image material        guard let imageMaterial = createMaterial() else { return nil }        // create entity        let skyboxEntity = Entity()        skyboxEntity.components.set(            ModelComponent(                mesh: skyBoxMesh,                materials: [imageMaterial]            )        )        // map texture to inner surface        skyboxEntity.scale *= .init(x: -1, y: 1, z: 1)        return skyboxEntity    }    private func createMaterial () -> UnlitMaterial? {        var material = UnlitMaterial()        do {            let texture = try TextureResource.load(named: selectedRoom)            material.color = .init(texture: .init(texture))        } catch {            print("Error loading image \(error)")        }        return material    }}

Viewing all articles
Browse latest Browse all 12111

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>