当前位置: 首页 > news >正文

深圳建设网站培训机构免费搭建手机网站

深圳建设网站培训机构,免费搭建手机网站,慢慢来建站公司,丽水网站开发在​​Day 4​​​中我们使用了​​ImmersiveSpace​​并在其中添加了一个立方体#xff0c;但对这个立方体我们只配置了长宽高#xff0c;并没有做进一步的操作。 本文中我们会通过纹理和材质对这个立方体的六个面分别进行不同的绘制。首先我们将​​ImmersiveView​​分拆…在​​Day 4​​​中我们使用了​​ImmersiveSpace​​并在其中添加了一个立方体但对这个立方体我们只配置了长宽高并没有做进一步的操作。 本文中我们会通过纹理和材质对这个立方体的六个面分别进行不同的绘制。首先我们将​​ImmersiveView​​分拆出来先新建一个​​ImmersiveView.swift​​文件这是一个视图文件所以请选择User Interface下的Swift View完成创建其中的内容待我们编写完​​ViewModel​​中的代码后再进行修改。 我们通过点击界面来打开沉浸式视图所以需要一个​​ContentView.swift​​文件来编写常规的窗口页面在其中添加一个Toggle开关用于打开和关闭沉浸式视图。 import SwiftUI import RealityKitstruct ContentView: View {State var showImmsersiveSpace falseEnvironment(\.openImmersiveSpace) var openImmersiveSpaceEnvironment(\.dismissImmersiveSpace) var dismissImmersiveSpacevar body: some View {NavigationStack {VStack {Toggle(Show ImmersiveSpace, isOn: $showImmsersiveSpace).toggleStyle(.button)}.padding()}.onChange(of: showImmsersiveSpace) { _, newValue inTask {if newValue {await openImmersiveSpace(id: ImmersiveSpace)} else {await dismissImmersiveSpace()}}}} }#Preview {ContentView() } 首先我们定义了一个​​showImmsersiveSpace​​变量供Toggle按钮开关时使用。然后要打开和关闭沉浸式空间我们可以分别使用​​Environment​​中的​​openImmersiveSpace​​和​​dismissImmersiveSpace​​通过​​onChange​​修饰符来监控​​showImmsersiveSpace​​变量的变化在切换到打开时就打开沉浸式空间。我们需要知道打开哪一个视图所以使用了​​id​​参数这个参数应与应用入口文件中所设置的一致。 接下来就编写入口文件 import SwiftUImain struct visionOSDemoApp: App {var body: some Scene {WindowGroup() {ContentView()}ImmersiveSpace(id: ImmersiveSpace) {ImmersiveView()}} } 注意这里​​ImmersiveSpace​​中所添加的​​id​​与之前​​ContentView​​中的要保持一致我们在后面会学到在同一个应用中也可以添加多个​​WindowGroup​​同样通过配置​​id​​进行区分。 接下来是核心文件​​ViewModel.swift​​ import SwiftUI import RealityKitMainActor class ViewModel: ObservableObject {private var contentEntity Entity()func setupContentEntity() - Entity {return contentEntity}func addCube() {guardlet texture1 try? TextureResource.load(named: Number_1),let texture2 try? TextureResource.load(named: Number_2),let texture3 try? TextureResource.load(named: Number_3),let texture4 try? TextureResource.load(named: Number_4),let texture5 try? TextureResource.load(named: Number_5),let texture6 try? TextureResource.load(named: Number_6)else {fatalError(Unable to load texture.)}let entity Entity()var material1 SimpleMaterial()var material2 SimpleMaterial()var material3 SimpleMaterial()var material4 SimpleMaterial()var material5 SimpleMaterial()var material6 SimpleMaterial()material1.color .init(texture: .init(texture1))material2.color .init(texture: .init(texture2))material3.color .init(texture: .init(texture3))material4.color .init(texture: .init(texture4))material5.color .init(texture: .init(texture5))material6.color .init(texture: .init(texture6))entity.components.set(ModelComponent(mesh: .generateBox(width: 0.5, height: 0.5, depth: 0.5, splitFaces: true),materials: [material1, material2, material3, material4, material5, material6]))entity.position SIMD3(x: 0, y: 1, z: -2)contentEntity.addChild(entity)} } 同样我们创建了​​setupContentEntity()​​方法但并没有在方法里添加任何模型而是将添加的工作交给了​​addCube()​​方法整个方法虽然很长但有大量重复的代码分别为六个面设置不同的图片。 通过​​TextureResource.load()​​方法设置了不同的纹理接着使用​​SimpleMaterial()​​创建了六个材质通过材质的​​color​​属性分别添加前面配置好的纹理 ​​Number_1.jpg​​等图片请见我们GitHub的演示代码我们先来说一下visionOS中的材质常见的材质请见下图 其中​​PhysicallyBasedMaterial​​也即PBR和​​SimpleMaterial​​是带光照信息的而​​UnlitMaterial​​和​​VideoMaterial​​都是不带光照信息的。 在​​ModelComponent​​方法中我们使用了​​mesh​​和​​materials​​参数​​mesh​​参数我们同样使用了​​MeshResource.generateBox​​来创建一个立方体不同的是这次我们指定了​​splitFaces​​参数该参数设为​​true​​表示顶点不进行合并因为我们要对六个面分别设置颜色或图像不指定该参数六个面都会使用相同的材质在本例中也就是都显示为​​1​​。 最后我们配置了​​position​​这里x, y, z坐标轴方向示意如下 接下来我们修改​​ImmersiveView.swift​​的内容如下 import SwiftUI import RealityKitstruct ImmersiveView: View {StateObject var model ViewModel()private var contentEntity Entity()var body: some View {RealityView { content incontent.add(model.setupContentEntity())model.addCube()}} } 这里的代码相对简单就是在​​RealityView​​中展示​​ViewModel​​中所添加的模型。 在运行应用前将Info.plist文件中的Preferred Default Scene Session Role切换回Window Application Session Role。 点击Show ImmersiveSpace按钮会得到如下界面 再次点击按钮就会收起这个模型。 示例代码​​GitHub仓库​​ 其它相关内容请见​​虚拟现实(VR)/增强现实(AR)visionOS开发学习笔记​​
http://www.hkea.cn/news/14271248/

相关文章:

  • 推广点击器seo平台优化服务
  • 如何上传自己做的网站网站自动采集系统
  • php做动漫网站物流网站系统php源码
  • 大有网网站wordpress上传主题没反应
  • 株洲市哪里有做公司官方网站广州网站营销推广设计
  • html简单网站成品免费网站建设仟首先金手指14
  • 办公室装修设计网站境外网站
  • 做拍卖网站网络公司 网站源码
  • 企业网站建设报价方案模板较好的网站设计师培训学校
  • 免费制作简历模板网站百度seo快速提升排名
  • 做网站之前备案wordpress编辑者
  • 做外贸什么网站好建设一个导航网站
  • 南宁网站关键字优化公司怎么做网页网站
  • 网站标题设计商贸公司寮步网站建设极致发烧
  • 健康门户网站源码wordpress特殊插件
  • 做网站好的网站建设公司哪家好wordpress两侧悬浮框
  • 大姚网站建设扬州建设信息网站
  • 凌河建设网站如何查询百度收录情况
  • 做公众号需要网站什么网站做简历最好
  • 淘宝客做网站多少钱网站域名要怎样规划
  • 做网站如何可以实现窗口切换功能襄阳网站建设营销
  • 网站建设好了怎么发布手机什么网站可以设计楼房
  • 河南天元建设公司网站行业网站特点
  • 淘宝客网站建设财经门户网站开发
  • 北京网站建设石榴汇wordpress弹窗打开网页
  • 洛阳做家教去什么网站建网站可以赚钱吗
  • 响应式网站开发费用蔷薇花园网站怎么做的
  • 保定网站制作推广公司网站开发项目建设规范
  • 建设公司网站的目的网站建设丷金手指专业十五
  • 网站建设二公司美团网站制作的特色