
輪っかをぐるぐる増やしていくiPhoneアプリのサンプルコードを描いてみます。
#import “ViewController.h”
@import SceneKit;
@interface ViewController () <SCNSceneRendererDelegate>
@property (nonatomic, weak) SCNView *sceneView;
@property (nonatomic) int counter;
@end
@implementation ViewController
– (void)viewDidLoad {
[super viewDidLoad];
[self setupScene];
[self createCamera];
}
– (void)setupScene {
SCNView *sv = [[SCNView alloc] initWithFrame:self.view.bounds];
sv.playing = NO;
sv.scene = [SCNScene scene];
sv.delegate = self;
sv.backgroundColor = [UIColor blackColor];
sv.allowsCameraControl = YES;
[self.view addSubview:sv];
self.sceneView = sv;
}
– (void)createCamera {
SCNNode *camera = [SCNNode node];
camera.camera = [SCNCamera camera];
camera.position = SCNVector3Make(0, 10, 50);
[self.sceneView.scene.rootNode addChildNode:camera];
}
– (void)createRing:(SCNMatrix4)transform {
float hue = (self.counter % 10) * 0.1;
SCNTorus *ring = [SCNTorus torusWithRingRadius:1 pipeRadius:0.05];
ring.firstMaterial.diffuse.contents = [UIColor colorWithHue:hue saturation:0.3 brightness:1 alpha:1];
SCNNode *ringNode = [SCNNode nodeWithGeometry:ring];
ringNode.transform = transform;
[self.sceneView.scene.rootNode addChildNode:ringNode];
}
– (void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
self.sceneView.playing = YES;
}
– (void)renderer:(id<SCNSceneRenderer>)aRenderer updateAtTime:(NSTimeInterval)time
{
if (self.counter > 500) {
self.sceneView.playing = NO;
return;
}
float w = M_PI / 60.0 * self.counter;
float r = 10.0;
float x = r * cos(w);
float y = self.counter * 0.04;
float z = r * sin(w);
SCNMatrix4 transform = SCNMatrix4Identity;
transform = SCNMatrix4Rotate(transform, M_PI_2, 1, 0, 0);
transform = SCNMatrix4Rotate(transform, -w, 0, 1, 0);
transform = SCNMatrix4Translate(transform, x, y, z);
[self createRing:transform];
self.counter++;
}
@end