如何以编程方式在SceneKit中围绕多维数据集包装png纹理

时间:2015-02-07 18:49:36

标签: ios macos opengl swift scenekit

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

    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

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

2 个答案:

答案 0 :(得分:3)

如果你有不同的图像,你可以像这样构建一个不同的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 - >查看控制器场景 - >查看控制器 - >查看 - >身份图标然后在自定义类下,将其从UIView更改为SCNView。否则,您收到错误消息,如:

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

答案 1 :(得分:0)

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

在您的情况下,所有图像都是相同的,因此您只需将图像(不是数组)分配给内容,使其显示在框的所有边上