水道の蛇口をくるくるするiPhoneアプリのサンプルコードを描いてみます。
#import “ViewController.h”
@import SceneKit;
@interface ViewController () <SCNSceneRendererDelegate>
@property (nonatomic, weak) SCNView *sceneView;
@end
@implementation ViewController
– (void)viewDidLoad {
[super viewDidLoad];
[self setupScene];
[self createTap];
[self createCamera];
}
– (void)setupScene {
SCNView *sv = [[SCNView alloc] initWithFrame:self.view.bounds];
sv.scene = [SCNScene scene];
sv.backgroundColor = [UIColor blackColor];
sv.autoenablesDefaultLighting = YES;
sv.delegate = self;
[self.view addSubview:sv];
self.sceneView = sv;
}
– (void)createTap {
SCNBox *body = [SCNBox boxWithWidth:10 height:2.5 length:3 chamferRadius:1];
body.firstMaterial.diffuse.contents = [UIColor lightGrayColor];
SCNNode *bodyNode = [SCNNode nodeWithGeometry:body];
[self.sceneView.scene.rootNode addChildNode:bodyNode];
SCNBox *bar = [SCNBox boxWithWidth:2 height:1.5 length:10 chamferRadius:0.5];
bar.firstMaterial.diffuse.contents = [UIColor lightGrayColor];
SCNNode *barNode = [SCNNode nodeWithGeometry:bar];
barNode.name = @”bar”;
barNode.pivot = SCNMatrix4MakeTranslation(0, 0, –4);
barNode.position = SCNVector3Make(0, –3, 0);
[self.sceneView.scene.rootNode addChildNode:barNode];
}
– (void)renderer:(id<SCNSceneRenderer>)aRenderer updateAtTime:(NSTimeInterval)time
{
SCNNode *bar = [self.sceneView.scene.rootNode childNodeWithName:@”bar” recursively:NO];
bar.rotation = SCNVector4Make(0, 1, 0, bar.rotation.w + 0.05);
if (arc4random() % 10) {
SCNBox *water = [SCNBox boxWithWidth:0.2 height:0.5 length:0.03 chamferRadius:0];
water.firstMaterial.diffuse.contents = [UIColor whiteColor];
water.firstMaterial.specular.contents = [UIColor blueColor];
SCNNode *waterNode = [SCNNode nodeWithGeometry:water];
waterNode.position = [bar.presentationNode convertPosition:SCNVector3Make(0, –1, 4.5) toNode:self.sceneView.scene.rootNode];
waterNode.physicsBody = [SCNPhysicsBody dynamicBody];
[waterNode.physicsBody applyTorque:SCNVector4Make(0, 1, 0, 0.2) impulse:YES];
[self.sceneView.scene.rootNode addChildNode:waterNode];
}
}
– (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
self.sceneView.playing = YES;
}
-(void)createCamera {
SCNNode *camera = [SCNNode node];
camera.camera = [SCNCamera camera];
camera.position = SCNVector3Make(0, –20, 50);
camera.rotation = SCNVector4Make(1, 0, 0, 0.3);
[self.sceneView.scene.rootNode addChildNode:camera];
}
@end