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

相关推荐
疯笔码良1 天前
【swiftUI】实现自定义的底部TabBar组件
ios·swiftui·swift
好家伙VCC2 天前
# 发散创新:基于ARCore的实时3D物体识别与交互开发实战 在增强现实(
java·python·3d·ar·交互
东坡肘子2 天前
祝大家马年新春快乐! -- 肘子的 Swift 周报 #123
人工智能·swiftui·swift
2501_946490384 天前
xR+AR双虚拟技术在晚会舞台的协同落地实践——以浙江卫视苏宁易购超级秀为例
ar·xr·hirender·hecoos
AEIC学术交流中心5 天前
【快速EI检索 | SPIE出版】第二届计算机视觉和增强现实国际学术会议(CVAR 2026)
人工智能·计算机视觉·ar
听麟7 天前
HarmonyOS 6.0+ 跨端区块链存证平台开发实战:分布式共识与数据不可篡改落地
分布式·深度学习·华为·区块链·ar·harmonyos
SwiftUI大叔8 天前
SwiftUI View 继承扩展:别再执着于 UIKit 的“子承父业”啦!
swiftui
katheta8 天前
时间序列模型发展历程(第一讲:AR/MA/ARMA)
ar·arma·时序建模·时序预测·时间序列模型·ma
东坡肘子8 天前
Xcode 迈入 Agent 时代 -- 肘子的 Swift 周报 #122
人工智能·swiftui·swift
方见华Richard9 天前
自指-认知几何架构 可行性边界白皮书(务实版)
人工智能·经验分享·交互·原型模式·空间计算