swift iOS sceneKit 导入外部dae

news/2024/7/20 20:22:37 标签: ios, swift, xcode

1、用blender把fbx改成 dae导出

2、在ios工程目录里随便建一个资源文件夹

3、代码

var gap = 0

        let window = UIApplication.shared.windows.first

        var topPadding = window?.safeAreaInsets.top ?? 0

        topPadding += navigationController?.navigationBar.frame.height ?? 0

        topPadding += (CGFloat)(gap);

        

        var tabBarH:CGFloat = navigationController!.tabBarController!.tabBar.frame.height

        var height = UIScreen.main.bounds.height - topPadding - tabBarH

        

        let scene = SCNScene()

        //let scene = SCNScene(named: "3DGameScene")

        let sceneView = SCNView(frame:CGRect(x:0,y:topPadding,width:UIScreen.main.bounds.width,height:height))

        sceneView.backgroundColor = UIColor.white

        sceneView.scene = scene;

        self.view.addSubview(sceneView)

        

        let camera = SCNCamera()

        let cameraNode = SCNNode()

        cameraNode.camera = camera

        cameraNode.position = SCNVector3(x: 0.0, y: 0.0, z: 3.0)

         

        let light = SCNLight()

        light.type = SCNLight.LightType.omni

        let lightNode = SCNNode()

        lightNode.light = light

        lightNode.position = SCNVector3(x: 1.5, y: 1.5, z: 1.5)

         

        let cubeGeometry = SCNBox(width: 1.0, height: 1.0, length: 1.0, chamferRadius: 0.0)

        let cubeNode = SCNNode(geometry: cubeGeometry)

        

        

        //scene.rootNode.addChildNode(cubeNode)

        scene.rootNode.addChildNode(lightNode)

        scene.rootNode.addChildNode(cameraNode)

        guard  let url = Bundle.main.url(forResource: "r2", withExtension: "dae") else {

            fatalError("baby_groot.dae not exit.")

        }

        guard let customNode = SCNReferenceNode(url: url) else {

            fatalError("load baby_groot error.")

        }

        customNode.load()

        print(customNode)

        customNode.position = SCNVector3(x: 0, y: 0, z: 0)

        scene.rootNode.addChildNode(customNode)

5、重新绑定纹理

把纹理图放到dae文件所在目录下

 


http://www.niftyadmin.cn/n/203984.html

相关文章

OJ:判断相同的树、另一棵树的子树 (二叉树)

相同的树 题目链接:100.相同的树 - 力扣(LeetCode) 给你两棵二叉树的根节点 p 和 q ,编写一个函数来检验这两棵树是否相同。 如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。 示例 1&a…

盐酸脱色用树脂吸附工艺

盐酸是氯化氢(HCI)的水溶液,是重要的基本化工原料,广泛用于化工原料、染料、医药、食品、印染、皮革、制糖、冶金等行业。纯盐酸为无色透明液体,工业盐酸是工业生产所得浓度为30%或36%的盐酸,因含有铁、氯等杂质而呈浅…

chatgpt prompts

1. Q&A (问答,根据现有知识回答问题。) Prompt I am a highly intelligent question answering bot. If you ask me a question that is rooted in truth, I will give you the answer. If you ask me a question that is nonsense, trickery, or has no clea…

Html相关笔记记录

HTML 文件中的DOCTYPE 是什么作用? 标签是一种标准通用标记语言的文档类型声明,它的目的是要告诉标准通用标记语言解析器,它应该使用什么样的文档类型定义(DTD)来解析文档 HTML, XML、 XHTML之间有什么区别&#xff1…

C-关键字(下)

文章目录循环控制switch-case-break-defaultdo-while-forgetchar()break-continuegotovoidvoid*returnconstconst修饰变量const修饰数组const修饰指针指针补充const 修饰返回值volatilestruct柔型数组union联合体联合体空间开辟问题利用联合体的性质,判断机器是大端还是小端enu…

【微服务笔记06】微服务组件之OpenFeign配置信息及RequestInterceptor请求拦截器

这篇文章,主要介绍微服务组件之OpenFeign相关配置信息及RequestInterceptor请求拦截器的使用。 目录 一、OpenFeign注解和配置信息 1.1、常见注解 (1)EnableFeignClients (2)FeignClient 1.2、常见配置信息 二、…

GORM 基础 -- Associations

1、Belongs To 属于(belongs to)关联设置与另一个模型建立一对一的连接,这样声明模型的每个实例都“属于(belongs to)”另一个模型的一个实例。 例如,如果您的应用程序包括用户(users &#x…

企业内训培训课程如何防下载和防盗录?(附测试实例组图)

企业内训培训课程如何防下载和防盗录?上实例效果,有兴趣的朋友也可以直接输入自己的名字测试哦~~ 做的演示DEMO如下,实现了“企业员工ID跑马灯”和“视频随机员工ID水印”,做了PC端和移动端的适配。 欢迎参观,欢迎探…