Рендеринг облака точек в SceneKit не работает
Я пытаюсь отладить проблему, из-за которой рендеринг облака точек не работает. Viewcontroller имеет весь код, как показано ниже. Я рисую сферу и облако точек из 5 точек красным цветом. Только сфера оказывает. Apple предложила настройки SCNGeometryElement для pointSize и MaximumPointScreenSpaceRadius. Однако это не имело большого значения. Я пытаюсь проверить это как на симуляторе, так и на реальном устройстве iPhone 6plus. Ни один из них не отображает облако точек. Любые предложения приветствуются. Большое спасибо!!
//
// ViewController.m
// SimpleScene
//
//
#import "ViewController.h"
@interface ViewController ()
@end
@implementation ViewController
@synthesize sceneView;
typedef struct {
float x, y, z; // position
float r, g, b; // color
} MyVertex;
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
SCNScene *scene = [SCNScene scene];
if(scene == nil) {
NSLog(@"Impossible to load the scene");
return;
}
NSLog(@"scene loaded");
// Camera
SCNNode *cameraNode = [SCNNode node];
cameraNode.camera = [SCNCamera camera];
cameraNode.position = SCNVector3Make(0, 0, 60);
[scene.rootNode addChildNode:cameraNode];
// Lights
SCNNode *lightNode = [SCNNode node];
lightNode.light = [SCNLight light];
lightNode.light.type = SCNLightTypeOmni;
lightNode.position = SCNVector3Make(0, 10, 10);
[scene.rootNode addChildNode:lightNode];
// test sphere
SCNNode *sphere = [SCNNode node];
sphere.geometry = [SCNSphere sphereWithRadius:0.3];
sphere.position = SCNVector3Make(1, -2, -10);
[scene.rootNode addChildNode:sphere];
// test point cloud
// vertex data
MyVertex vertices[5] = {
{2.42808, 1.3133, -10, 1.0, 0.0, 0.0},
{3.92043, 2.8015, -10, 1.0, 0.0, 0.0},
{4.80496, 2.0725, -10, 1.0, 0.0, 0.0},
{5.09035, 1.6247, -10, 1.0, 0.0, 0.0},
{0.911526, 14.6359, -10, 1.0, 0.0, 0.0}
};
NSData *vertexData = [NSData dataWithBytes:vertices length:sizeof(vertices)];
// SCNGeometrySource objects for vertex and color
SCNGeometrySource *vertexSource, *colorSource;
vertexSource = [SCNGeometrySource geometrySourceWithData:vertexData semantic:SCNGeometrySourceSemanticVertex vectorCount:5 floatComponents:YES componentsPerVector:3 bytesPerComponent:sizeof(float) dataOffset:offsetof(MyVertex, x) dataStride:sizeof(MyVertex)];
colorSource = [SCNGeometrySource geometrySourceWithData:vertexData semantic:SCNGeometrySourceSemanticColor vectorCount:5 floatComponents:YES componentsPerVector:3 bytesPerComponent:sizeof(float) dataOffset:offsetof(MyVertex, r) dataStride:sizeof(MyVertex)];
// SCNGeometryElement
SCNGeometryElement *element = [SCNGeometryElement geometryElementWithData:nil primitiveType:SCNGeometryPrimitiveTypePoint primitiveCount:5 bytesPerIndex:sizeof(int)];
element.pointSize = 0.05;
element.maximumPointScreenSpaceRadius = 100.0;
NSMutableArray<SCNGeometrySource *> *sources;
[sources addObject:vertexSource];
[sources addObject:colorSource];
NSMutableArray<SCNGeometryElement *> *elements;
[elements addObject:element];
SCNGeometry *geometry = [SCNGeometry geometryWithSources:sources elements:elements];
SCNNode *pcNode = [SCNNode nodeWithGeometry:geometry];
[scene.rootNode addChildNode:pcNode];
sceneView.allowsCameraControl = TRUE;
sceneView.scene = scene;
NSLog(@"scene set in sceneView");
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end