visionOS空间计算实战开发教程Day 9 打造“任意门”

我们在​​Day 8​​中演示了attachment的实现,本节的知识点是portal。portal相当于哆啦A梦里的任意门,它让我们可以打开另一个世界,这个世界独立于当前的世界,具有单独的光照系统并且由portal几何图形进行遮罩。

要创建portal,首先就需要创建一个世界(​​makeWorld​​),在其中可以添加自己的实体。接着创建portal并将其关联至刚刚创建的世界。

主要的代码如下:

复制代码
import SwiftUI
import RealityKit

struct ContentView: View {
    var body: some View {
        RealityView { content in
            let world = makeWorld()
            let portal = makePortal(world: world)
            content.add(world)
            content.add(portal)
        }
    }
    
    func makeWorld() -> Entity {
        let world = Entity()
        world.components[WorldComponent.self] = .init()
        
        let environment = try! EnvironmentResource.load(named: "Sunlight")
        world.components[ImageBasedLightComponent.self] = .init(source: .single(environment), intensityExponent: 12)
        world.components[ImageBasedLightReceiverComponent.self] = .init(imageBasedLight: world)
        
        let earth = try! ModelEntity.load(named: "Earth")
        earth.position = SIMD3<Float>(x: -0.1, y: 0, z: -0.4)
        world.addChild(earth)
        
        return world
    }
    
    func makePortal(world: Entity) -> Entity {
        let portal = Entity()
        
        portal.components[ModelComponent.self] = .init(mesh: .generatePlane(width: 0.5, height: 0.5, cornerRadius: 0.5), materials: [PortalMaterial()])
        portal.components[PortalComponent.self] = .init(target: world)
        
        return portal
    }
    
}

其中的​​Sunlight.skybox​​文件及​​Earth.usdz​​文件请见我们的代码仓库。

示例代码:​​GitHub仓库​

其它相关内容请见​​虚拟现实(VR)/增强现实(AR)&visionOS开发学习笔记​

相关推荐
ykjhr_3d1 天前
广州虚拟展厅ar定制开发推荐
ar·虚拟展厅·数字展厅·ar虚拟展厅
欲儿2 天前
magicCamera——利用相机识别纸牌并替换为特定纸牌
opencv·ar·安卓开发·轮廓检测·纸牌识别
Daniel_Coder2 天前
iOS Widget 开发-12:Widget 深度链接与导航
ios·swiftui·swift·widget·intents
Daniel_Coder3 天前
iOS Widget 开发-11:Widget 交互按钮实战(iOS 17+ App Intents)
ios·swiftui·swift·widget·link·appintents
东坡肘子3 天前
消失的 WWDC 愿望单 -- 肘子的 Swift 周报 #136
人工智能·swiftui·swift
北京阿法龙科技有限公司3 天前
光学透视系统的技术演进:衍射光波导促使AR智能眼镜在公安安防领域的显示突破
ar
浩宇软件开发3 天前
SwiftUI入门 10 分钟学会做一个 App 引导页
ios·swiftui·swift
图码5 天前
生命游戏的优雅解法:从O(mn)空间到O(1)空间的进阶之旅
数据结构·算法·游戏·矩阵·空间计算
ar01235 天前
AR巡检平台:构筑智能巡检新模式的数字化引擎
人工智能·ar
沃普天科技5 天前
TYPE C全功能10G数据放大延长PS8353 PS8780 PS8778 8K60HZ
驱动开发·游戏·计算机外设·电脑·ar·硬件工程·vr