Рендеринг облака точек в 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

0 ответов

Другие вопросы по тегам