
四隅が隠れるような丸を配置して、四角形を回転させると大きさが変わって見えるよという錯視のiPhoneアプリのサンプルコードを描いてみます。
#import “ViewController.h”
@import SceneKit;
@interface ViewController ()
@property (nonatomic, weak) SCNView *sceneView;
@end
@implementation ViewController
– (void)viewDidLoad {
[super viewDidLoad];
[self setupScene];
[self createRectangle];
[self createCamera];
}
– (void)setupScene {
SCNView *sv = [[SCNView alloc] initWithFrame:self.view.bounds];
sv.backgroundColor = [self color:2];
sv.scene = [SCNScene scene];
sv.allowsCameraControl = true;
[self.view addSubview:sv];
self.sceneView = sv;
}
– (void)createRectangle {
float r = 20.0;
for (int i=0; i<4; i++) {
float x = r * cos(M_PI_2 * i + M_PI_4);
float y = r * sin(M_PI_2 * i + M_PI_4);
SCNSphere *dot = [SCNSphere sphereWithRadius:10];
dot.firstMaterial.diffuse.contents = [self color:0];
SCNNode *node = [SCNNode nodeWithGeometry:dot];
node.position = SCNVector3Make(x, y, 0);
[self.sceneView.scene.rootNode addChildNode:node];
}
SCNBox *rect = [SCNBox boxWithWidth:30 height:30 length:1 chamferRadius:0];
rect.firstMaterial.diffuse.contents = [self color:1];
SCNNode *rectNode = [SCNNode nodeWithGeometry:rect];
rectNode.name = @”rect”;
[self.sceneView.scene.rootNode addChildNode:rectNode];
}
– (void)createCamera {
SCNNode *camera = [SCNNode node];
camera.camera = [SCNCamera camera];
camera.position = SCNVector3Make(0, 0, 80);
[self.sceneView.scene.rootNode addChildNode:camera];
}
– (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
SCNNode *rect = [self.sceneView.scene.rootNode childNodeWithName:@”rect” recursively:NO];
if (!rect.hasActions) {
[rect runAction:[SCNAction rotateByAngle:2.0 * M_PI aroundAxis:SCNVector3Make(0, 0, 1) duration:5.0]];
}
}
#define ColorHex(rgb) [UIColor colorWithRed:((rgb & 0xFF0000) >> 16) /255.0 green:((rgb & 0xFF00) >> 8)/255.0 blue:(rgb & 0xFF)/255.0 alpha:1.0]
– (UIColor *)color:(int)i {
if (i > 2) return nil;
int colorCode[] = {0x2F2933, 0xBDF271, 0x01A2A6};
return ColorHex(colorCode[i]);
}
@end