标签: scnscene

ARkit - 从SCNScene中的Web服务器URL加载.scn文件

我正在为我的应用程序使用ARKit,我尝试从我的web服务器(URL)动态加载.scn文件

这是我的代码的一部分

 let urlString = "https://da5645f1.ngrok.io/mug.scn"
        let url = URL.init(string: urlString)
        let request = URLRequest(url: url!)
        let session = URLSession.shared
        let downloadTask = session.downloadTask(with: request,
                completionHandler: { (location:URL?, response:URLResponse?, error:Error?)
                -> Void in
                print("location:\(String(describing: location))")
                let locationPath = location!.path
                let documents:String = NSHomeDirectory() + "/Documents/mug.scn"
                ls = NSHomeDirectory() + "/Documents"
                let fileManager = FileManager.default
                if (fileManager.fileExists(atPath: documents)){
                     try! fileManager.removeItem(atPath: documents)
                }
                try! fileManager.moveItem(atPath: locationPath, toPath: documents)
                print("new location:\(documents)")
                let node = SCNNode()
                let scene =  SCNScene(named:"mug.scn", inDirectory: ls)
                let nodess …
Run Code Online (Sandbox Code Playgroud)

ios swift scnnode scnscene arkit

10
推荐指数
1
解决办法
2854
查看次数

SceneKit:如何放置3D对象以适应SCNView边界?

我是新来的SceneKit三维物体.我一直在做一些研究,但我没有找到我的问题的答案.

我需要在水平方向上显示多个3D对象UICollectionView,每个单元格中有一个.我希望它们对齐并且大小相同,所以我希望它们适合父视图,也就是说SCNView.

用于描绘场景的图像:

每个在SCNView中的3D对象都具有相同的大小

我希望3D对象的边界在视觉上与SCNView的边界匹配.我希望3D对象在视图中"适合",有点像UIViewContentMode.scaleAspectFit.


到目前为止,这是我的代码:

let scene=SCNScene(named: file_name)
let node=scene.rootNode.childNode(withName: node_name, recursively: true)!
node.scale=SCNVector3Make(28, 28, 28)
node.position=SCNVector3Make(0, 0.05, -0.5)
scene.rootNode.addChildNode(node)
sceneview.scene=scene
Run Code Online (Sandbox Code Playgroud)

ios scenekit swift scnnode scnscene

7
推荐指数
0
解决办法
574
查看次数

将.jpg和.mtl文件应用于SceneKit中的.obj文件

设计师提供了三个文件:

  • 图片.JPG
  • 一些东西.MTL
  • 随你.OBJ

我可以成功将.obj文件加载到我的场景中,如下所示:

  SCNView * sceneView = [SCNView new];
  sceneView.frame = view.bounds;
  [view addSubview:sceneView];

  SCNScene * scene = [SCNScene sceneNamed:@"models.scnassets/whatever.obj"];
  [sceneView setScene:scene];
Run Code Online (Sandbox Code Playgroud)

我正在努力将.jpg和.mtl文件应用于.obj文件.我尝试使用以下代码应用图像,但没有爱:

SCNMaterial * material = [SCNMaterial material];
material.diffuse.contents = [UIImage imageNamed:@"image.jpg"];

SCNNode * materialNode = [SCNNode node];
materialNode.geometry.firstMaterial = material;
[scene.rootNode addChildNode:materialNode];
Run Code Online (Sandbox Code Playgroud)

3d objective-c ios scnscene scnmaterial

7
推荐指数
1
解决办法
4947
查看次数

ARKit - 如何从服务器URL加载.scn和纹理文件

我尝试在ARKit应用程序中从服务器URL加载动态.scn和纹理文件.我已经通过这种 方式从web url上实现了加载.scn文件..但是在运行后我没有在设备上看到任何纹理.我收到以下错误消息.

ARKitExample[3016:995067] [SceneKit] Error: Failed loading : <C3DImage 0x1d42e1980 src:file:///var/containers/Bundle/Application/622ACF79-2318-4953-A9AE-9A7F2B453AFB/ARKitExample.app/textures/lamp_DIFFUSE.png [0.000000x0.000000]>
ARKitExample[3016:995067] [SceneKit] Error: Failed loading : <C3DImage 0x1d00fe800 src:file:///var/containers/Bundle/Application/622ACF79-2318-4953-A9AE-9A7F2B453AFB/ARKitExample.app/textures/lamp_NORMAL.png [0.000000x0.000000]>
ARKitExample[3016:995067] [SceneKit] Error: Failed loading : <C3DImage 0x1d40ff800 src:file:///var/containers/Bundle/Application/622ACF79-2318-4953-A9AE-9A7F2B453AFB/ARKitExample.app/textures/lamp_METALLIC.png [0.000000x0.000000]>
ARKitExample[3016:995067] [SceneKit] Error: Failed loading : <C3DImage 0x1d42e0d80 src:file:///var/containers/Bundle/Application/622ACF79-2318-4953-A9AE-9A7F2B453AFB/ARKitExample.app/textures/lamp_ROUGHNESS.png [0.000000x0.000000]>
ARKitExample[3016:995067] [SceneKit] Error: Failed loading : <C3DImage 0x1d02e2e00 src:file:///var/containers/Bundle/Application/622ACF79-2318-4953-A9AE-9A7F2B453AFB/ARKitExample.app/textures/lamp_SHADOW.png [0.000000x0.000000]>
Run Code Online (Sandbox Code Playgroud)

如何解决这个问题.谢谢

@ Xartec我已经尝试过你提到的方式,但我没有得到任何回复.我怎么能解决它?

let urlString = "\("https://d533c2fd.ngrok.io/")\("mode")"
        let url = URL.init(string: urlString)
        let request = URLRequest(url: url!)
        let session = URLSession.shared
        let downloadTask = session.downloadTask(with: request, …
Run Code Online (Sandbox Code Playgroud)

ios swift scnnode scnscene arkit

7
推荐指数
1
解决办法
2192
查看次数

检查SCNNode SCNAction是否完成

我已经创建了一个玩家可以移动的SceneKit 3D迷宫世界.像跳跃这样的一些动作涉及在几秒钟的时间段内改变观察方向时上下移动相机.在此期间,我想忽略用户的轻击和滑动,这通常会导致其他类型的动作,如转弯和前进.

我可以创建一个匹配跳转持续时间的计时器并设置Bool,但我希望能够以更简单的方式检查摄像机的SCNNode.

有没有一种简单的方法来查看相机的SCNNode是否不再运行SCNAction跳转,所以我可以在其他点按和滑动操作之前添加此逻辑?

或者也许有一个SCNAction可以设置我可以在跳转序列的开始和结束时放置的Bool?

这是我的跳转代码:

        let jumpUp: SCNAction = SCNAction.move(to: SCNVector3Make(Float(Int(-yPos)), Float(Int(xPos)), jumpHeight), duration: jumpTime)
        let jumpAppex: SCNAction = SCNAction.wait(duration: jumpWaitTime)
        let fallDown: SCNAction = SCNAction.move(to: SCNVector3Make(Float(Int(-yPos)), Float(Int(xPos)), cameraHeight), duration: jumpTime)

        var lookDown: SCNAction = SCNAction.rotateTo(x: 0, y: 0, z: CGFloat(?), duration: jumpTurnTime)
        let noLook: SCNAction = SCNAction.wait(duration: jumpTime*2.0)
        var lookBack: SCNAction = SCNAction.rotateTo(x: 0, y: 0, z: 0, duration: jumpTurnTime)

        switch playerDirection.direction
        {
            case .south:
                lookDown = SCNAction.rotateTo(x: 0, y: 0, z: CGFloat(southZ), duration: jumpTurnTime)
                lookBack = SCNAction.rotateTo(x: …
Run Code Online (Sandbox Code Playgroud)

ios scenekit swift scnnode scnscene

6
推荐指数
1
解决办法
1156
查看次数

在 SceneKit 中设置相机的视角

如何设置 2d 视图的 SceneKit SCNCamera属性,例如:

- top view
- bottom view
- front view
- back view
- left side view
- right side view
Run Code Online (Sandbox Code Playgroud)

camera scenekit scnscene scncamera

5
推荐指数
1
解决办法
2880
查看次数

SceneKit:向摄像机节点添加定向光无效

根据本答案中的建议,目标是向场景添加环境光以及相机的定向光.

这适用于Xcode场景编辑器,定向灯设置为70%白色,环境光设置为50%白色.方向灯的欧拉角使用默认值.

编码这种安排失败了.就好像没有添加定向灯一样.对场景没有影响; 好像只有环境光存在.

x欧拉角分量的不同值没有区别 - 尝试了PI/2,PI和其他值,但仍然没有变化.

但是,将方向光添加到场景的根节点(scene.rootNode.addChildNode(directionalLightNode))确实会将光添加到场景中.

fileprivate func addLightNode() {
    // Create ambient light
    let ambientLightNode = SCNNode()
    ambientLightNode.light = SCNLight()
    ambientLightNode.light!.type = .ambient
    ambientLightNode.light!.color = UIColor(white: 0.70, alpha: 1.0)

    // Add ambient light to scene
    scene.rootNode.addChildNode(ambientLightNode)

    // Create directional light
    let directionalLight = SCNNode()
    directionalLight.light = SCNLight()
    directionalLight.light!.type = .directional
    directionalLight.light!.color = UIColor(white: 1.0, alpha: 1.0)
    directionalLight.eulerAngles = SCNVector3(x: 0, y: 0, z: 0)

    // Add directional light to camera
    let cameraNode …
Run Code Online (Sandbox Code Playgroud)

scenekit scnnode scnlight scnscene

5
推荐指数
1
解决办法
1786
查看次数

SceneKit:以编程方式使用场景检查器中的“程序天空”选项?

在 Xcode SceneKit 场景检查器中,Procedural Sky该部分下有一个选项Environment

根据一些教程,启用此选项将为 3D 模型带来更多真实感。

1) 如果您从代码而不是从场景检查器创建场景,如何启用该Procedural Sky选项?没有Environment财产。

2) 该Procedural Sky选项是否仅在使用 PBR 材质时才有效?

3d xcode augmented-reality scenekit scnscene

5
推荐指数
1
解决办法
1367
查看次数

如何在 SwiftUI 中清除 SceneView 3D 对象的背景

有谁知道如何清除 SceneView 3D 对象的背景?我正在尝试使用 UIColor.clear,但它使它变成白色。[这应该是清晰的,但它是白色的]

import SwiftUI
import SceneKit

struct TestView: View {
    var body: some View {
    
        ZStack{
                    Color.green
                    SceneView(
                        scene: {
                            let scene = SCNScene(named: "Earth.scn")!
                            scene.background.contents = UIColor.clear
                            return scene
                        }(),
                        options: [.autoenablesDefaultLighting,.allowsCameraControl]
                    )
                    .frame(width: UIScreen.main.bounds.width, height: UIScreen.main.bounds.height/2, alignment: .center)
                
                }
    }
}

struct TestView_Previews: PreviewProvider {
    static var previews: some View {
        TestView()
    }
}
Run Code Online (Sandbox Code Playgroud)

xcode swift scnscene sceneview swiftui

5
推荐指数
1
解决办法
759
查看次数

SceneKit:了解SCNNode的pivot属性

目标是增加SCNBox的长度,使其仅在正z方向上生长.

这个答案建议玩pivot房产.

但是,该pivot属性的文档在SCNNode页面上是稀疏的,并且SCNBox页面上没有任何内容.

有人可以解释该pivot物业的运作方式吗?

scenekit scnnode scnscene

4
推荐指数
2
解决办法
4374
查看次数

ios - 将 MDLAsset 转换为 MDLMesh 时无法打开 OBJ 文件

我正在使用ModelIO演示加载和纹理化.OBJ文件。当我使用本地文件时,下面的代码工作正常。

guard let url = Bundle.main.url(forResource: "myVase", withExtension: "obj") else {
    fatalError("Failed to find model file.")
}

let asset = MDLAsset(url:url)
guard let object = asset.object(at: 0) as? MDLMesh else {
    fatalError("Failed to get mesh from asset.")
}
Run Code Online (Sandbox Code Playgroud)

但是,当我更改代码以使用Amazon S3 中的文件而不是本地文件时。我收到错误:“无法打开 OBJ 文件”“无法从资产获取网格。” 这是我的代码:

let url = URL.init(string: "https://s3.amazonaws.com/myObject/.../object.obj")

let asset = MDLAsset(url:url!)
guard let object = asset.object(at: 0) as? MDLMesh else {
   fatalError("Failed to get mesh from asset.")
} …
Run Code Online (Sandbox Code Playgroud)

swift scnscene

3
推荐指数
1
解决办法
1781
查看次数

获取 ARKIT 中聚焦相机的所有 ARAnchors

当应用程序首先启动时,在一面墙上检测到垂直表面,而不是相机聚焦到第二面墙,在第二面墙上检测到另一个表面。第一面墙现在对 ARCamera 不再可见,但此代码为我提供了第一面墙的锚点。但我需要第二面墙的锚点,现在在相机中可见/聚焦。

if let anchor = sceneView.session.currentFrame?.anchors.first {
    let node = sceneView.node(for: anchor)
    addNode(position: SCNVector3Zero, anchorNode: node)
} else {
    debugPrint("anchor node is nil")
}
Run Code Online (Sandbox Code Playgroud)

ios scnscene arkit

2
推荐指数
1
解决办法
1384
查看次数

互操作 MTKView (MetalKit) 和 SceneKit

我正在使用 MetalKit 并且有一个复杂的渲染管道。结果呈现为MTKView.

现在我想将 的内容提供MTKView给 aSCNScene并使用 aSCNCamera来执行 HDR 等后期处理效果。

这怎么可能?

我不需要一般性的指导。如果可能的话,我想要具体的电话。

scenekit metal metalkit scnscene mtkview

1
推荐指数
1
解决办法
864
查看次数