24

私は iOS 開発に不慣れで、困惑しています。面ごとに異なる色を持つ SceneKit を使用して立方体をレンダリングしようとしています。

これは私がこれまでに得たものです:

func sceneSetup() {
    // 1
    let scene = SCNScene()

    // 2
    let BoxGeometry = SCNBox(width: 0.9, height: 0.9, length: 0.9, chamferRadius: 0.0)

    BoxGeometry.firstMaterial?.diffuse.contents = UIColor.redColor()
    let cube = SCNNode(geometry: BoxGeometry)
    cube.position = SCNVector3(x: 0, y: 0, z: -1)
    scene.rootNode.addChildNode(cube)

    // 3
    sceneView.scene = scene
    sceneView.autoenablesDefaultLighting = true
    sceneView.allowsCameraControl = true

しかし、私はそれぞれの顔に異なる色を持たせたいと思っています。それ、どうやったら出来るの?

4

3 に答える 3

25

ボックスは、6 つの異なる要素 (各面に 1 つ) で構成されています。また、ジオメトリ オブジェクトには最初のマテリアルのプロパティが 1 つあるだけでなく、マテリアルの配列のプロパティもあることに気付いたかもしれません。

複数の要素と複数のマテリアルを持つオブジェクトは、要素ごとにマテリアル (およびラップ) の増分を選択します。

たとえば、4 つの要素と 1 つのマテリアル

Element   1  2  3  4
Material  1  1  1  1

または 4 つの要素と 2 つの材料

Element   1  2  3  4
Material  1  2  1  2  // note that they are repeating 

たとえば、4 つの要素と 7 つのマテリアル

Element   1  2  3  4
Material  1  2  3  4  // (5, 6, 7) is unused

ボックスの場合、これは、6 つのマテリアルの配列を使用して、ボックスの各面に固有のマテリアルを持たせることができることを意味します。私の Scene Kit book (Objective-C)の章の 1 つのサンプル コードに、この例があります。

// Each side of the box has its own color
// --------------------------------------
// All have the same diffuse and ambient colors to show the
// effect of the ambient light, even with these materials.

SCNMaterial *greenMaterial              = [SCNMaterial material];
greenMaterial.diffuse.contents          = [NSColor greenColor];
greenMaterial.locksAmbientWithDiffuse   = YES;

SCNMaterial *redMaterial                = [SCNMaterial material];
redMaterial.diffuse.contents            = [NSColor redColor];
redMaterial.locksAmbientWithDiffuse     = YES;

SCNMaterial *blueMaterial               = [SCNMaterial material];
blueMaterial.diffuse.contents           = [NSColor blueColor];
blueMaterial.locksAmbientWithDiffuse    = YES;

SCNMaterial *yellowMaterial             = [SCNMaterial material];
yellowMaterial.diffuse.contents         = [NSColor yellowColor];
yellowMaterial.locksAmbientWithDiffuse  = YES;

SCNMaterial *purpleMaterial             = [SCNMaterial material];
purpleMaterial.diffuse.contents         = [NSColor purpleColor];
purpleMaterial.locksAmbientWithDiffuse  = YES;

SCNMaterial *magentaMaterial            = [SCNMaterial material];
magentaMaterial.diffuse.contents        = [NSColor magentaColor];
magentaMaterial.locksAmbientWithDiffuse = YES;


box.materials =  @[greenMaterial,  redMaterial,    blueMaterial,
                   yellowMaterial, purpleMaterial, magentaMaterial];
于 2014-12-16T16:56:53.253 に答える
4

迅速なヘルプをありがとう。私はあなたが提起したコードを使用しましたが、NSColor を使用できなかったので、uicolor を試しましたが、得られたのは黒い立方体だけだったので、これを試してみました。

    let BoxGeometry = SCNBox(width: 0.95, height: 0.95, length: 0.95, chamferRadius: 0.0)

    let greenMaterial = SCNMaterial()
    greenMaterial.diffuse.contents = UIImage(named: "g")
    greenMaterial.locksAmbientWithDiffuse = true;

    let redMaterial = SCNMaterial()
    redMaterial.diffuse.contents = UIImage(named: "r")
    redMaterial.locksAmbientWithDiffuse = true;


    let blueMaterial  = SCNMaterial()
    blueMaterial.diffuse.contents = UIImage(named: "b")
    blueMaterial.locksAmbientWithDiffuse = true;


    let yellowMaterial = SCNMaterial()
    yellowMaterial.diffuse.contents = UIImage(named: "y")
    yellowMaterial.locksAmbientWithDiffuse = true;


    let purpleMaterial = SCNMaterial()
    purpleMaterial.diffuse.contents = UIImage(named: "p")
    purpleMaterial.locksAmbientWithDiffuse = true;


    let WhiteMaterial = SCNMaterial()
    WhiteMaterial.diffuse.contents = UIImage(named: "w")
    WhiteMaterial.locksAmbientWithDiffuse   = true;


    BoxGeometry.materials =  [greenMaterial,  redMaterial,    blueMaterial,
    yellowMaterial, purpleMaterial, WhiteMaterial];

g は緑などの jpeg であり、現在は機能しています。

于 2014-12-17T05:39:43.503 に答える