我是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
最终看起来像是一个白色光源,反射出黑色立方体与黑色背景。我错过了什么?我感谢所有回复
答案 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
支持传递图像数组(以创建立方体贴图)。
在您的情况下,所有图像都是相同的,因此您只需将图像(不是数组)分配给内容,使其显示在框的所有边上