如何以编程方式在SceneKit中围绕多维数据集包装png纹理
我是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
最终看起来像是一个白色光源,reflection出黑色立方体与黑色背景。 我错过了什么? 我感谢所有回复
传递图像数组(以创建立方体贴图)仅由reflective
材质属性和场景的background
。
在您的情况下,所有图像都是相同的,因此您只需将图像(不是数组)分配给内容,使其显示在框的所有边上
如果你有不同的图像,你可以从每个像建立一个不同的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然后在Custom Class下,将它从UIView更改为SCNView。否则,您会收到一条错误消息,如:
无法将’UIView’类型的值转换为’SCNView’