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开发学习笔记​

相关推荐
广州华锐视点3 天前
AR禁毒:科技赋能,筑牢防毒新防线
科技·ar
人类群星闪耀时6 天前
5G + AR:让增强现实真正“实时交互”起来
5g·ar·交互
球球和皮皮6 天前
Babylon.js学习之路《一、初识 Babylon.js:什么是 3D 开发与 WebGL 的完美结合?》
javascript·3d·前端框架·ar·vr
Blossom.1187 天前
虚拟现实(VR)与增强现实(AR)在教育领域的应用:开启沉浸式学习新时代
人工智能·深度学习·学习·机器学习·ar·制造·vr
jz_ddk10 天前
[学习]RTKLib详解:ppp.c与ppp_ar.c
c语言·学习·ar
LitchiCheng10 天前
复刻低成本机械臂 SO-ARM100 上位机控制调试
人工智能·机器人·ar
EQ-雪梨蛋花汤13 天前
【方案分享】基于Three.js和Stencil Buffer的AR实物遮挡方案,支持不规则动态区域(AR地下设施、AR虚实遮挡)
javascript·ar·restful
R²AIN SUITE15 天前
空间计算:开启人机交互新纪元的下一代技术范式
人工智能·ai·空间计算
EQ-雪梨蛋花汤16 天前
【Unity AR开发插件】一、高效热更新:Unity AR 插件结合 HybridCLR 与 ARFoundation 的开源仓库分享
unity·开源·ar
斯裕科技17 天前
从高端制造到民生场景:天元轻量化软件的“破局”之路
ar·xr·制造·vr·虚拟现实·增强现实