DAE模型的一部分在Xcode中变得透明了
我正在使用从3DSMAX导出到Blender软件的DAE模型. 但是,当我将其加载到Xcode中时,它的右侧变得透明. 解决方案 我相信这个问题是模型右侧的Normals,它们可能面临错误的方式. 脸的方向称为其Normal.有时会朝着错误的方向露面.它很容易修复. 在编辑模式下选择面部 网格>正常 希望这会有所帮助.
2 2024-04-01
编程技术问答社区
ARKit - 3D模型的支点是错误的
我使用Blender将我的模型导出到dae,并将其导入到scn>. 但是我的问题是枢轴点完全错误 当我在场景中使用它时. 奇怪的是,枢轴点位于 来自Scenekit的模型查看器(甚至是scn). 世界坐标都为零. 解决方案 将3D模型的所有元素分组,并在所需的位置移动该组的枢轴点. SceneKit总是正确地以99.99%的枢轴点读取. 即使您只有一个3D对象 - 将其分组为Blender. Scenekit在dae文件中看到了层次结构,并尊重Group的枢轴.因此,您的枢轴在场景中的位置将与搅拌机相同.
0 2024-04-01
编程技术问答社区
带有.dae的SCNNode静态体导致的问题
我已经在搅拌机中构建了景观模型,导出到.DAE并添加到我的Xcode项目中. 我已经加载了场景,然后将孩子(景观网格网格)附加到我的landscapenode上,这是完美的. 但是,当我将静态物理体附着在陆地范围内时,我的Heronode似乎在试图飞越陆地时坠毁在看不见的墙上. 我正在寻找的功能是与我建模的土地的明显碰撞,因此Heronode不能飞过土地并被迫绕过它. 注意:我没有在搅拌机中进行y轴的任何转换,也没有简单地旋转围绕-x轴的节点90度. 编辑:我尝试添加物理形状的代码 landscapeNode.physicsBody = [SCNPhysicsBody bodyWithType:SCNPhysicsBodyTypeStatic shape:[SCNPhysicsShape shapeWithNode: [landscapeScene.rootNode childNodeWithName:@"Grid" recursively:NO] o
0 2024-04-01
编程技术问答社区
是否有办法在场景套件中添加一个轮廓?
我一直在场景套件中制作游戏,但是很难看到对象的边缘,使某些游戏细节无法看到.有没有办法在所有游戏对象上制作黑色大纲? 解决方案 您可以使用另一个答案中提到的SCNTechnique(您可以查看有关 cel shading ,具有边缘 - 检测通行证),但是全框后处理非常昂贵. 在OS X上,您还可以利用几何形状着色器(请参阅本文).但这在iOS上不可用,可能更难实施和正确. 我会采用一种更轻松的技术,这仅涉及顶点和碎片着色器.您可以看一下本文 - 使用SCNProgram或着色器修饰符在Scenekit中创建. 其他解决方案 有一个示例是为使用Scntechnique的节点制作发光轮廓: https://github.com/laanlabs/scntechniqueglow 您可以修改颜色和模糊方法以实现触发轮廓效果. 其他解决方案 另一个scntechnique示例,如下所述: https://www.nurfacegames.com/every
0 2024-04-01
编程技术问答社区
当从Blender导出到COLLADA/.dae格式以便在SceneKit中使用时,包括纹理。
我能够通过使用collada/.dae格式导出在Blender中创建的网格,以在Scenekit中使用 - 但是iOS设备上没有显示纹理. 另外,OS X上的预览不会打开Blender导出的任何Collada文件 - 但是Sidebar Preview di 显示网格.出口时需要哪些选项才能使这项工作? 解决方案 首先创建一个Scnassets文件夹(不需要但有用) 在您的桌面上创建一个文件夹,并给它一个" .scnassets"的扩展名 将您的collada(.dae)文件以及将在其中使用的任何纹理. 将文件夹拖到项目中,并像往常一样保存为复制. 单击您的SCNASSET文件夹,您将看到一个检查框(如果不检查),以转换为" Y"上轴. 将纹理分配给您的场景模型 单击您在Xcode的项目中的Collada(.dae)文件. 您应该看到您的场景,左侧是相机,灯光,材料等的列表.这是你的场景树. 打开"材料"选项卡,然后单击您的一
6 2024-04-01
编程技术问答社区
我怎样才能在不看到 "无标题动画 "的情况下导出DAE文件供Scene Kit使用?
我正在尝试将Cheetah 3D和Blender 3D创建的动画加载到场景套件中,但是我所得到的只是一堆"无题 - 动画",每个动画都是相同的动画. 有人知道如何正确从Blender或Cheetah 3D导出它们,以便场景套件可以使用它们? 解决方案 我挖了这个,因为这也让我很烦.所有"无标题的动画"都是每个骨头的单个动画.您可以从Xcode右侧面板中的属性检查器中获取ID.使用Swift,您可以获取动画. let urlOfScene = Bundle.main.url(forResources: "your url", withExtension: "dae") let source = SCNSceneSource(url: urlOfScene, options: nil) let armature = source.entryWithIdentifier("Armature", withClass: SCNNode.self) as SCNNode let
2 2024-04-01
编程技术问答社区
如何使用Xcode转换器创建USDZ文件?
在2018 WWDC Apple 与创建USDZ文件有关: 要创建自己的USDZ文件,USDZ_Converter已被捆绑为Xcode 10 Beta的一部分.它是一个命令行工具,用于从OBJ文件,单帧ALEMBIC(ABC)文件,USD文件(.USDA或USD.C)创建USDZ文件 基本命令行是 xcrun usdz_converter myFile.obj myFile.usdz 我已经安装了Xcode 10 beta,但是在2018年6月4日提供的Xcode 10 Beta捆绑包中无法运行甚至找到USDZ_Converter(构建10L176W). 注意:我仍在Macos Highsierra上跑步,我还没有安装Macos Mojave 10.14 Beta ...但没有认为这应该是原因. 是否有人能够让此Xcrun Usdz_converter工作? 如果是这样,请分享步骤. 解决方案 更新:2023年7月3日. usdzco
0 2024-03-27
编程技术问答社区
为SceneKit中的SKVideoNode确定视频的大小/纵横比
如何从Avplayer获得视频的视频大小来设置节点的几何大小? 例如,我有一个宽度和高度的scnplane let planeGeo = SCNPlane(width: 5, height: 5) 所以现在我实例化视频播放器 let videoURL = NSURL(string: someURL) let player = AVPlayer(URL: videoURL!) 和我的Skvideonode let spriteKitScene = SKScene(size: CGSize(width: 1920, height: 1080)) spriteKitScene.scaleMode = .AspectFit videoSpriteKitNode = SKVideoNode(AVPlayer: player) videoSpriteKitNode.anchorPoint = CGPointMake(0,0) videoSpriteKitNode.s
0 2024-03-21
编程技术问答社区
AVPlayerLayer作为SCNMaterial没有被渲染,音频播放正常
我正在尝试使用av​​playerlayer作为scnmaterial,以分配给scnsphere. 基于: https://developer.apple.com/library/mac/samplecode/scenekit_slides_wwdc2013/listings/caspe_kit_session_wwdc_2013_sources_sources_slides_ascslidemateriallayer_m.html 我创建一个播放器,创建一个玩家层并在有没有背景层的情况下尝试为我的scnsphere 分配材料 问题是,我在这里得到相同的结果: scnmaterialproperty不渲染层 音频播放,视频根本没有呈现! 代码的位很简单: // video player let path = NSBundle.mainBundle().pathForResource("tb", ofType: "mp4") le
0 2024-03-21
编程技术问答社区
SKVideoNode(嵌入SKScene中)作为Scene Kit Node的纹理不能使用
我正在尝试通过使用SceneKit将视频映射到VR项目的原始圆柱体:嵌入在SkScene中的Skvideonode作为Scenekit Scntube对象的纹理,我只是无法显示视频以显示就像静止图像一样.下面的操场代码应生成映射到圆柱体的移动视频,但映射不起作用: 编辑:在列表结束时添加了单行以修复.下面的代码应起作用 import UIKit import SceneKit // for 3D mapping import SpriteKit // for SKVideoNode import QuartzCore // for basic animation import XCPlayground // for live preview import AVFoundation // for video playback engine // create a scene view with an empty scene var sceneVie
0 2024-03-21
编程技术问答社区
使用AVCaptureDevice作为SCNScene的背景内容
在来自演示文稿的片段: let captureDevice: AVCaptureDevice = ... scene.background.contents = captureDevice 但是以下代码 let captureDevice = AVCaptureDevice.default(.builtInWideAngleCamera, for: .video, position: .back)! scene.background.contents = captureDevice 产生错误: [SceneKit] Error: Cannot get pixel buffer (CVPixelBufferRef) 我还尝试创建和启动AVCaptureSession,然后使用该设备,但给出相同的结果. 这里可能有什么问题? 解决方案 编辑 此错误似乎已固定在iOS 11.2 中 原始答案 这似乎是场景中的一个错误. 如果对您
0 2024-03-21
编程技术问答社区
ARKIT:SKVideoNode在节点离开场景时继续播放,暂停不起作用
我正在使用Scenekit和Arkit实施一个演示项目,在这里我将相机保存在一些图片上,并从URL播放视频.一切正常,但是我无法停止以前的视频,并且启动了另一个视频.以前的视频播放在背景上.当我切换图像时,有时会发生.我的实施是: @IBOutlet var sceneView: ARSCNView! var videosNames = [String]() var player = AVPlayer() var videoNode = SKVideoNode() 在ViewDidload中, sceneView.delegate = self // Create a session configuration let configuration = ARImageTrackingConfiguration() // first see if there is a folder called "ARImages" Resource Group in
2 2024-03-21
编程技术问答社区
如何获取 ARImageAnchor 相对于给定 SCNNode 的方向?
如何获得与ARKit给定的SCNNode有关的ARImageAnchor的方向数据?这是基本场景. 启动AR会话后的某个点放置一个节点.假设其名为 OriginNode .然后ARKit用于扫描放置在环境中的图像.当摄像机检测到图像时,我想计算检测到的图像相对于 onementnode 的x,y,z和检测图像的方向(tilt,pan,roll).请注意,该设备是固定在uideviceorientation.landscaperight的. 因此,用户可以在水平握住设备的同时扫描图像,并且相机向前指向,或者设备是水平的,相机直接指向. 当我扫描放置在桌子上的图像时,我当前代码获得的值是准确的,我相信 配置: let configuration = ARWorldTrackingConfiguration() guard let referenceImages = ARReferenceImage.referenceImages(inGroupNamed: "
0 2024-03-19
编程技术问答社区
如何在 SceneKit 中显示金属和透明纹理?
我很难在场景中显示一些纹理,这是我想使用的模型: sketchfab中的模型:该模型应使用场景套件以AR环境中的这些颜色和纹理出现.但是金色的尖端看起来是黑色的,透明镜头根本没有出现.有什么建议可以解决这个问题吗? 模型为.scn格式.这是模型材料属性: 如果您需要任何其他信息,请告诉我. 预先感谢您. 解决方案 没有Scenekit中具有真实折射索引(IOR)的逼真的玻璃,但是您可以使用phong着色器轻松地创建一个伪造的玻璃. phong着色器还具有玻璃的三个重要特性 - 镜面,反射率和 fresneleptents . 用于金属材料使用physicallyBased阴影模型. 这是一个代码: import SceneKit class ViewController: NSViewController { override func viewDidLoad() { super.viewDidLoad()
6 2024-03-19
编程技术问答社区
ARKit - 渲染器线程死锁
我的AR iOS应用程序在没有任何问题的情况下就可以悬挂,或者是什么阻止主线程 真正感谢任何帮助. 下面是线程backtrace (lldb) thread list Process 83660 stopped thread #1: tid = 0xa7210c, 0x00000001d8e02784 libsystem_kernel.dylib`__psynch_rw_wrlock + 8, queue = 'com.apple.main-thread', stop reason = signal SIGSTOP thread #6: tid = 0xa721c0, 0x00000001d8ddf644 libsystem_kernel.dylib`mach_msg_trap + 8, name = 'com.apple.uikit.eventfetch-thread' thread #10: tid = 0xa721e2, 0x00000001d8ddf644 l
0 2024-03-19
编程技术问答社区
ARKit - 如何实现SCNRenderer().audioListener?
我尝试在我的应用程序上实现这个新的位置音频. 使用Tapgesture,我在场景上插入了一个无人机,然后将其附加到Sound.mp3 func tapToPlace(node: SCNNode, recognizer: UITapGestureRecognizer, view : ARSCNView){ debugPrint("tap") if gameState == .placeObject { DispatchQueue.global().async { let tapedScreen = recognizer.location(in: view) guard let query = view.raycastQuery(from: tapedScreen, allowing: .existingPlaneGeometry
0 2024-03-19
编程技术问答社区
在ARKit中为3D模型添加动画
在此视频中,给对象一个动画,可以在放置时徘徊在房间周围,然后在敲击时被另一个动画放下. 如何在项目中添加这种动画? 添加已经动画的对象是唯一的方法吗? 谢谢 https://youtu.be/os_kscr0xkq 解决方案 我认为上下悬停很可能是动画序列.悬停效果的以下动画序列将在第一个下拉下的选择功能中起作用. let moveDown = SCNAction.move(by: SCNVector3(0, -0.1, 0), duration: 1) let moveUp = SCNAction.move(by: SCNVector3(0,0.1,0), duration: 1) let waitAction = SCNAction.wait(duration: 0.25) let hoverSequence = SCNAction.sequence([moveUp,waitAction,mov
0 2024-03-19
编程技术问答社区
在SceneKit中使用阴影时减少应用延迟
我正在Scenekit上的3D地图上工作.当我在场景中启用定向光的铸造阴影属性时,会出现阴影,但是应用程序变得非常慢. 如何减少场景中仍保持阴影的滞后? 解决方案 使用 a>(在3D创作或2D创作应用程序中以纹理形式生成的阴影),而不是True Shadow Map.将伪造的阴影作为3D平面使用PNG文件格式的纹理(RGB * A).在使用RealeKit或Scenekit中使用阴影时,它会大大减少处理和内存使用.
2 2024-03-19
编程技术问答社区
保持节点的X轴和Z轴与地面平行,同时旋转Y轴以面对摄像机。
我试图保持一个scnnode始终距离相机的前部一米,并操纵节点,以使x和z轴总是平行于地面,而节点围绕y轴旋转,所以节点总是面对相机. 下面的代码在大多数情况下实现了我的目标,但是当顺时针或逆时针转动超过90°时,节点开始转动.我该如何解决? override func viewDidLoad() { super.viewDidLoad() boxParent.position = (sceneView.pointOfView?.position)! boxParent.orientation = (sceneView.pointOfView?.orientation)! boxParent.eulerAngles = (sceneView.pointOfView?.eulerAngles)! sceneView.scene.rootNode.addChildNode(boxParent) boxOrigin.positio
2 2024-03-19
编程技术问答社区
当参考图像消失时,ARKit会删除一个节点
我正在构建AR扫描仪应用程序,用户能够扫描不同的图像并为此获得奖励. 当他们将相机指向某个特定图像时 - 我将SCNNode放在该图像的顶部,然后从该图像中删除相机 - SCNNode get被解雇. 但是,当图像消失并且相机停留在同一位置SCNNode没有被解雇. 如何使其与参考图像消失一起消失? 我在这里研究了很多其他答案,但它们没有帮助我 这是我添加和删除SCNNode的代码: extension ARScannerScreenViewController: ARSCNViewDelegate { func renderer(_ renderer: SCNSceneRenderer, didAdd node: SCNNode, for anchor: ARAnchor) { DispatchQueue.main.async { self.instructionLabel.isHidden = true } if let imag
0 2024-03-19
编程技术问答社区