在Reality Composer生成的场景中以编程方式设置纹理

用户名

我正在使用Reality Composer创建圆柱体对象。我的要求是用自定义图像包装圆柱体。图像由应用程序动态创建。

我已经尝试了以下方法,但到目前为止没有用。

    1. 从体验加载锚点之后。
    1. 从锚点获取模型实体。
    1. 从模型实体获取模型组件。
    1. 添加或编辑材料。

码:

// Load the "anchor" scene from the "Experience" Reality File
let anchor = try! Experience.loadAnchor()

// Add the anchor to the scene
arView.scene.anchors.append(anchor)

let cylinderEntity : Entity = anchor.cylinder!

let cylinderModelEntity = cylinderEntity.children[0]

var cylinderModelComponent : ModelComponent = cylinderModelEntity.components[ModelComponent.self]!

let paths : NSArray = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true) as NSArray
let path : NSString = paths.object(at: 0) as! NSString
let filePath : NSString = path.strings(byAppendingPaths: ["Image.png"])[0] as NSString
let url = URL.init(fileURLWithPath: filePath as String)

// Save image.
let image : UIImage = createImage()
try! image.pngData()?.write(to: url)
let data = NSData.init(contentsOf: url)
print(data!)

var material = SimpleMaterial()
material.tintColor = UIColor.yellow
material.baseColor = try! MaterialColorParameter.texture(TextureResource.load(contentsOf: url))
material.roughness = MaterialScalarParameter(floatLiteral: 0.1)
material.metallic = MaterialScalarParameter(floatLiteral: 1.0)

cylinderModelComponent.materials[0] = material

任何帮助都非常感谢。

安迪·费多罗夫(Andy Fedoroff)

您忘记设置boxComponent需要存储在实体上的。

为此使用set()实例方法

在您的代码中,它应如下所示:

anchor.cylinder!.components.set(cylinderModelComponent)

在我的代码中,它看起来像这样:

anchor.steelBox!.components.set(boxComponent)

这是我的完整代码版本(我在macOS应用中对其进行了测试):

import AppKit
import RealityKit

class GameViewController: NSViewController {

    @IBOutlet var arView: ARView!

    override func awakeFromNib() {

        let anchor = try! Experience.loadBox()
        anchor.steelBox?.scale = SIMD3(x: 9, y: 9, z: 9)
        anchor.steelBox?.orientation = simd_quatf(angle: -Float.pi/4,
                                                   axis: SIMD3(x: 1, y: 1, z: 0))      

        let boxEntity: Entity = anchor.steelBox!.children[0]
        var boxComponent: ModelComponent = boxEntity.components[ModelComponent].self!

        let paths: NSArray = NSSearchPathForDirectoriesInDomains(.documentDirectory, 
                                                                 .userDomainMask, 
                                                                  true) as NSArray

        // If you're testing it in macOS app – place your Image.png here:
        // /Users/<UserName>/Library/Containers/<ApplicationName>/Data/Documents/

        let path: NSString = paths.object(at: 0) as! NSString
        let filePath: NSString = path.strings(byAppendingPaths: ["Image.png"])[0] as NSString
        let url = URL(fileURLWithPath: filePath as String)

        var material = SimpleMaterial()
        material.tintColor = NSColor.yellow
        material.baseColor = try! MaterialColorParameter.texture(TextureResource.load(contentsOf: url))
        material.roughness = MaterialScalarParameter(floatLiteral: 0.1)
        material.metallic = MaterialScalarParameter(floatLiteral: 0.1)    
        boxComponent.materials = [material]

        anchor.steelBox!.components.set(boxComponent)
        arView.scene.anchors.append(anchor)
    }
}

在此处输入图片说明

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

带有2个场景的Reality Composer项目文件会在Xcode中播放吗?

来自分类Dev

如何将自己的Reality Composer场景加载到RealityKit中?

来自分类Dev

如何在Reality Composer上安装手势

来自分类Dev

RealityKit –从同一Reality Composer项目中加载另一个场景

来自分类Dev

如何使用Reality kit在屏幕前设置实体?

来自分类Dev

Reality Composer –是否可以同时分配垂直和水平锚点?

来自分类Dev

我想在Android的vuforia Augmented Reality中更改3D模型

来自分类Dev

如何在 Mixed Reality Toolkit 中重新排列求解器的执行顺序?

来自分类Dev

以编程方式为场景中的按钮设置onClickListeners

来自分类Dev

如何以编程方式设置 SKNode 在 ARSKView 场景中的位置?

来自分类Dev

Spring Batch documentation about chunk-oriented step versus reality?

来自分类Dev

在Windows Server 2019上启用Windows Mixed Reality

来自分类Dev

是否可以在 Windows Server 2019 上启用 Windows Mixed Reality?

来自分类Dev

在1个场景中以编程方式编码2个UISwitch

来自分类Dev

以编程方式更改默认场景

来自分类Dev

OpenGL 以编程方式创建纹理

来自分类Dev

在Java中以编程方式从XML生成XSD

来自分类Dev

在iOS中以编程方式生成ppt

来自分类Dev

在Java中以编程方式生成XSD

来自分类Dev

在iOS中以编程方式生成ppt

来自分类Dev

在Java中以编程方式生成XSD

来自分类Dev

在Swift中以编程方式设置tabBarItem标题

来自分类Dev

在NSScrollView中以编程方式设置NSTextView

来自分类Dev

在Swift中以编程方式设置Action Listener

来自分类Dev

以编程方式在ListView中设置激活的项目

来自分类Dev

灰烬:在Mixin中以编程方式设置queryParams

来自分类Dev

以编程方式在cardview中设置边距

来自分类Dev

以编程方式在EditText中设置密码点

来自分类Dev

在WPF中以编程方式设置ContentControl的内容

Related 相关文章

  1. 1

    带有2个场景的Reality Composer项目文件会在Xcode中播放吗?

  2. 2

    如何将自己的Reality Composer场景加载到RealityKit中?

  3. 3

    如何在Reality Composer上安装手势

  4. 4

    RealityKit –从同一Reality Composer项目中加载另一个场景

  5. 5

    如何使用Reality kit在屏幕前设置实体?

  6. 6

    Reality Composer –是否可以同时分配垂直和水平锚点?

  7. 7

    我想在Android的vuforia Augmented Reality中更改3D模型

  8. 8

    如何在 Mixed Reality Toolkit 中重新排列求解器的执行顺序?

  9. 9

    以编程方式为场景中的按钮设置onClickListeners

  10. 10

    如何以编程方式设置 SKNode 在 ARSKView 场景中的位置?

  11. 11

    Spring Batch documentation about chunk-oriented step versus reality?

  12. 12

    在Windows Server 2019上启用Windows Mixed Reality

  13. 13

    是否可以在 Windows Server 2019 上启用 Windows Mixed Reality?

  14. 14

    在1个场景中以编程方式编码2个UISwitch

  15. 15

    以编程方式更改默认场景

  16. 16

    OpenGL 以编程方式创建纹理

  17. 17

    在Java中以编程方式从XML生成XSD

  18. 18

    在iOS中以编程方式生成ppt

  19. 19

    在Java中以编程方式生成XSD

  20. 20

    在iOS中以编程方式生成ppt

  21. 21

    在Java中以编程方式生成XSD

  22. 22

    在Swift中以编程方式设置tabBarItem标题

  23. 23

    在NSScrollView中以编程方式设置NSTextView

  24. 24

    在Swift中以编程方式设置Action Listener

  25. 25

    以编程方式在ListView中设置激活的项目

  26. 26

    灰烬:在Mixin中以编程方式设置queryParams

  27. 27

    以编程方式在cardview中设置边距

  28. 28

    以编程方式在EditText中设置密码点

  29. 29

    在WPF中以编程方式设置ContentControl的内容

热门标签

归档