【问题标题】:How to programmatically wrap png texture around cube in SceneKit如何在 SceneKit 中以编程方式将 png 纹理包裹在立方体周围
【发布时间】:2015-04-07 18:57:34
【问题描述】:

我是 SceneKit 的新手...尝试让一些基本的东西正常工作,但到目前为止没有太大的成功。出于某种原因,当我尝试将 png 纹理应用于 CNBox 时,我最终只得到黑色。这是我在 viewDidLoad 中的简单代码 sn-p:

    let sceneView = (view as SCNView)

    let scene = SCNScene()

    let boxGeometry = SCNBox(width: 10.0, height: 10.0, length: 10.0, chamferRadius: 1.0)

    let mat = SCNMaterial()
    mat.locksAmbientWithDiffuse = true
    mat.diffuse.contents = ["sofb.png","sofb.png","sofb.png","sofb.png","sofb.png", "sofb.png"]
    mat.specular.contents = UIColor.whiteColor()
    boxGeometry.firstMaterial = mat

    let boxNode = SCNNode(geometry: boxGeometry)

    scene.rootNode.addChildNode(boxNode)

    sceneView.scene = scene

    sceneView.autoenablesDefaultLighting = true
    sceneView.allowsCameraControl = true

它最终看起来像一个白色光源,从黑色立方体反射出黑色背景。我错过了什么?感谢所有回复

【问题讨论】:

    标签: ios macos opengl swift scenekit


    【解决方案1】:

    如果你有不同的图像,你会像这样构建一个不同的 SCNMaterial 对象:

    let material_L = SCNMaterial()
    material_L.diffuse.contents = UIImage(named: "CapL")
    

    这里,CapL 指的是已存储在项目的 Assets.xcassets 文件夹中的 .png 文件。构建 6 个这样的对象后,您将它们交给 boxNode,如下所示:

    boxGeometry.materials = [material_L, material_green_r, material_K, material_purple_r, material_g, material_j]
    

    请注意,“boxGeometry”最好命名为“box”或“cube”。此外,最好在项目的新类中完成这项工作,其结构如下:

    class BoxScene: SCNScene {
    

    然后您将在 viewController 的 viewDidLoad 方法中使用现代 Swift 调用,如下所示:

    let scnView = self.view as! SCNView
    scnView.scene = BoxScene()
    

    (为了让 let 语句起作用,请转到 Main.storyboard -> View Controller Scene -> View Controller -> View -> Identity icon 然后在自定义类下,将其从 UIView 更改为 SCNView。否则,您会收到错误消息消息,例如:

    无法将“UIView”类型的值转换为“SCNView”

    【讨论】:

      【解决方案2】:

      reflective 材质属性和场景的background 支持传递图像数组(以创建立方体贴图)。

      在您的情况下,所有图像都是相同的,因此您只需将图像(而不是数组)分配给内容,使其出现在框的所有侧面

      【讨论】:

      • 当我将此行更改为字符串而不是数组时,它开始工作mat.diffuse.contents="sofb.png"
      猜你喜欢
      • 1970-01-01
      • 2013-06-15
      • 1970-01-01
      • 2016-12-21
      • 2018-06-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-16
      相关资源
      最近更新 更多