更改 SCNNode/Geometry/Material 的颜色
Change color of SCNNode/Geometry/Material
我是 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];
我的问题是我想改变它们的颜色,这样我就可以分辨出哪个是哪个。有什么办法可以做到这一点,还是我必须以其他方式创建我的台词?我正在制作 mac 应用程序,而不是 iOS 应用程序,仅供参考。另外,我知道重复代码,我只是累了,我会解决的。
更改几何体的 material,使用 -firstMaterial
或(如果它是一个复杂的对象)-materials
数组。
SCNMaterial *redMaterial = [SCNMaterial new];
redMaterial.diffuse.contents = [NSColor redColor];
xAxis.firstMaterial = redMaterial;
或者更简洁:
yAxis.firstMaterial.diffuse.contents = [NSColor magentaColor];
zAxis.firstMaterial.diffuse.contents = [NSColor yellowColor];
我是 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];
我的问题是我想改变它们的颜色,这样我就可以分辨出哪个是哪个。有什么办法可以做到这一点,还是我必须以其他方式创建我的台词?我正在制作 mac 应用程序,而不是 iOS 应用程序,仅供参考。另外,我知道重复代码,我只是累了,我会解决的。
更改几何体的 material,使用 -firstMaterial
或(如果它是一个复杂的对象)-materials
数组。
SCNMaterial *redMaterial = [SCNMaterial new];
redMaterial.diffuse.contents = [NSColor redColor];
xAxis.firstMaterial = redMaterial;
或者更简洁:
yAxis.firstMaterial.diffuse.contents = [NSColor magentaColor];
zAxis.firstMaterial.diffuse.contents = [NSColor yellowColor];