更改SCNNode/Geometry/Material的颜色

Min*_*ber 5 cocoa objective-c scenekit

我是SceneKit的新手,正在开始测试应用程序.我有一个移动的小立方体.我想添加轴(X,Y,Z).我是这样创造的.

    SCNVector3 xPositions[] = {SCNVector3Make(-50, 0, 0), SCNVector3Make(50, 0, 0)};

    int indicies[] = {0, 1};
    NSData *indexData = [NSData dataWithBytes:indicies length:sizeof(indicies)];

// X axis
    SCNGeometrySource *xSource = [SCNGeometrySource geometrySourceWithVertices:xPositions count:2];
    SCNGeometryElement *xElement = [SCNGeometryElement geometryElementWithData:indexData primitiveType:SCNGeometryPrimitiveTypeLine primitiveCount:2 bytesPerIndex:sizeof(int)];
    SCNGeometry *xAxis = [SCNGeometry geometryWithSources:@[xSource] elements:@[xElement]];
    SCNNode *xNode = [SCNNode nodeWithGeometry:xAxis];
    [self.gameView.scene.rootNode addChildNode:xNode];

    // Y axis
    SCNVector3 yPositions[] = {SCNVector3Make(0, -50, 0), SCNVector3Make(0, 50, 0)};
    SCNGeometrySource *ySource = [SCNGeometrySource geometrySourceWithVertices:yPositions count:2];
    SCNGeometryElement *yElement = [SCNGeometryElement geometryElementWithData:indexData primitiveType:SCNGeometryPrimitiveTypeLine primitiveCount:2 bytesPerIndex:sizeof(int)];
    SCNGeometry *yAxis = [SCNGeometry geometryWithSources:@[ySource] elements:@[yElement]];
    SCNNode *yNode = [SCNNode nodeWithGeometry:yAxis];
    [self.gameView.scene.rootNode addChildNode:yNode];

    // Z axis
    SCNVector3 zPositions[] = {SCNVector3Make(0, 0, -50), SCNVector3Make(0, 0, 50)};
    SCNGeometrySource *zSource = [SCNGeometrySource geometrySourceWithVertices:zPositions count:2];
    SCNGeometryElement *zElement = [SCNGeometryElement geometryElementWithData:indexData primitiveType:SCNGeometryPrimitiveTypeLine primitiveCount:2 bytesPerIndex:sizeof(int)];
    SCNGeometry *zAxis = [SCNGeometry geometryWithSources:@[zSource] elements:@[zElement]];
    SCNNode *zNode = [SCNNode nodeWithGeometry:zAxis];
    [self.gameView.scene.rootNode addChildNode:zNode];
Run Code Online (Sandbox Code Playgroud)

我的问题是,我想改变它们的颜色,以便我可以分辨哪个是哪个.有没有办法可以做到这一点,还是我必须以另一种方式创建我的线?我正在制作一个Mac应用程序,而不是iOS应用程序,只是一个fyi.此外,我知道重复代码,我只是累了,我会解决这个问题.

Hal*_*ler 8

使用-firstMaterial或(如果它是一个复杂的对象)-materials数组更改几何体的材质.

SCNMaterial *redMaterial = [SCNMaterial new];
redMaterial.diffuse.contents = [NSColor redColor];
xAxis.firstMaterial = redMaterial;
Run Code Online (Sandbox Code Playgroud)

或者更简洁:

yAxis.firstMaterial.diffuse.contents = [NSColor magentaColor];
zAxis.firstMaterial.diffuse.contents = [NSColor yellowColor];
Run Code Online (Sandbox Code Playgroud)

  • 我最终使用了 `emission` 而不是 `diffuse`。就我而言,我正在使用为 ARKit 项目启用的“sceneView.autoenablesDefaultLighting”,而“diffuse”没有改变我节点的颜色。 (2认同)