Scene Kit Session WWDC 2014/Sources/Slides/AAPLSlideTechniques.m
/* |
Copyright (C) 2014-2016 Apple Inc. All Rights Reserved. |
See LICENSE.txt for this sample’s licensing information |
Abstract: |
Presents the Xcode SceneKit editor. |
*/ |
#import "AAPLPresentationViewController.h" |
#import "AAPLSlideTextManager.h" |
#import "AAPLSlide.h" |
#import "Utils.h" |
@interface AAPLSlideTechniques : AAPLSlide |
{ |
SCNNode *_plistGroup; |
SCNNode *_pass3; |
SCNNode *_pass2; |
SCNNode *_pass1; |
} |
@end |
typedef enum { |
StepIntro, |
Step1Pass, |
Step3Passes, |
Step3PassesConnected, |
StepFiles, |
StepFilesPlist, |
StepCode, |
StepSample, |
StepCount |
} TechniqueSteps; |
@implementation AAPLSlideTechniques |
- (void)setupSlideWithPresentationViewController:(AAPLPresentationViewController *)presentationViewController { |
// Set the slide's title and add some text |
self.textManager.title = @"Multi-Pass Effects"; |
self.textManager.subtitle = @"SCNTechnique"; |
[self.textManager addBullet:@"Multi-pass effects" atLevel:0]; |
[self.textManager addBullet:@"Post processing" atLevel:0]; |
[self.textManager addBullet:@"Chain passes" atLevel:0]; |
[self.textManager addBullet:@"Set and animate shader uniforms in Objective-C" atLevel:0]; |
} |
- (NSUInteger)numberOfSteps{ |
return StepCount; |
} |
- (void)presentStepIndex:(NSUInteger)index withPresentationViewController:(AAPLPresentationViewController *)presentationViewController { |
switch (index) { |
case StepIntro: |
break; |
case StepCode: |
[self.textManager flipOutTextOfType:AAPLTextTypeBullet]; |
[_plistGroup removeFromParentNode]; |
[self.textManager addEmptyLine]; |
[self.textManager addCode:@"// Load a technique\nSCNTechnique *technique = [SCNTechnique #techniqueWithDictionary#:aDictionary];\n\n" |
"// Chain techniques\ntechnique = [SCNTechnique #techniqueBySequencingTechniques#:@[t1, t2 ...];\n\n" |
"// Set a technique\naSCNView.#technique# = technique;"]; |
[self.textManager flipInTextOfType:AAPLTextTypeBullet]; |
[self.textManager flipInTextOfType:AAPLTextTypeCode]; |
break; |
case StepFiles: |
{ |
[_pass2 removeFromParentNode]; |
[self.textManager flipOutTextOfType:AAPLTextTypeBullet]; |
[self.textManager addBullet:@"Load from Plist" atLevel:0]; |
[self.textManager flipInTextOfType:AAPLTextTypeCode]; |
_plistGroup = [SCNNode node]; |
[self.contentNode addChildNode:_plistGroup]; |
//add plist icon |
SCNNode *node = [SCNNode asc_planeNodeWithImageNamed:@"plist.png" size:8 isLit:YES]; |
node.position = SCNVector3Make(0, 3.7, 10); |
[_plistGroup addChildNode:node]; |
//add plist icon |
node = [SCNNode asc_planeNodeWithImageNamed:@"vsh.png" size:3 isLit:YES]; |
for(int i = 0; i<5; i++){ |
node = [node clone]; |
node.position = SCNVector3Make(6, 1.4, 10 - i); |
[_plistGroup addChildNode:node]; |
} |
node = [SCNNode asc_planeNodeWithImageNamed:@"fsh.png" size:3 isLit:YES]; |
for(int i = 0; i<5; i++){ |
node = [node clone]; |
node.position = SCNVector3Make(9, 1.4, 10 - i); |
[_plistGroup addChildNode:node]; |
} |
} |
break; |
case StepFilesPlist: |
{ |
//add plist icon |
SCNNode *node = [SCNNode asc_planeNodeWithImageNamed:@"technique.png" size:9 isLit:YES]; |
node.position = SCNVector3Make(0, 3.5, 10.1); |
node.opacity = 0.0; |
[_plistGroup addChildNode:node]; |
[SCNTransaction begin]; |
[SCNTransaction setAnimationDuration:0.75]; |
node.position = SCNVector3Make(0, 3.5, 11); |
node.opacity = 1.0; |
[SCNTransaction commit]; |
} |
break; |
case Step1Pass: |
{ |
[self.textManager flipOutTextOfType:AAPLTextTypeBullet]; |
SCNNode *node = [SCNNode asc_planeNodeWithImageNamed:@"pass1.png" size:15 isLit:YES]; |
node.position = SCNVector3Make(0, 3.5, 10.1); |
node.opacity = 0.0; |
[self.contentNode addChildNode:node]; |
[SCNTransaction begin]; |
[SCNTransaction setAnimationDuration:0.75]; |
node.position = SCNVector3Make(0, 3.5, 11); |
node.opacity = 1.0; |
[SCNTransaction commit]; |
_pass1 = node; |
} |
break; |
case Step3Passes: |
{ |
[_pass1 removeFromParentNode]; |
_pass2 = [SCNNode node]; |
_pass2.opacity = 0.0; |
_pass2.position = SCNVector3Make(0, 3.5, 6); |
SCNNode *node = [SCNNode asc_planeNodeWithImageNamed:@"pass2.png" size:8 isLit:YES]; |
node.position = SCNVector3Make(-8, 0, 0); |
[_pass2 addChildNode:node]; |
node = [SCNNode asc_planeNodeWithImageNamed:@"pass3.png" size:8 isLit:YES]; |
node.position = SCNVector3Make(0, 0, 0); |
[_pass2 addChildNode:node]; |
node = [SCNNode asc_planeNodeWithImageNamed:@"pass4.png" size:8 isLit:YES]; |
node.position = SCNVector3Make(8, 0, 0); |
[_pass2 addChildNode:node]; |
[self.contentNode addChildNode:_pass2]; |
[SCNTransaction begin]; |
[SCNTransaction setAnimationDuration:0.75]; |
_pass2.position = SCNVector3Make(0, 3.5, 9); |
_pass2.opacity = 1.0; |
[SCNTransaction commit]; |
} |
break; |
case Step3PassesConnected: |
{ |
[self.textManager addEmptyLine]; |
[self.textManager addBullet:@"Connect pass inputs/outputs" atLevel:0]; |
SCNNode *node = [SCNNode asc_planeNodeWithImageNamed:@"link.png" size:8.75 isLit:YES]; |
node.position = SCNVector3Make(0.01, -2, 0); |
node.opacity = 0; |
[_pass2 addChildNode:node]; |
[SCNTransaction begin]; |
[SCNTransaction setAnimationDuration:0.75]; |
SCNNode *n = _pass2.childNodes[0]; |
n.position = SCNVector3Make(-7.5, -0.015, 0); |
n = _pass2.childNodes[2]; |
n.position = SCNVector3Make(7.5, 0.02, 0); |
node.opacity = 1; |
[SCNTransaction commit]; |
} |
break; |
case StepSample: |
{ |
[self.textManager flipOutTextOfType:AAPLTextTypeCode]; |
[self.textManager flipOutTextOfType:AAPLTextTypeSubtitle]; |
[self.textManager setSubtitle:@"Example—simple depth of field"]; |
[self.textManager flipInTextOfType:AAPLTextTypeCode]; |
_pass3 = [SCNNode node]; |
SCNNode *node = [SCNNode asc_planeNodeWithImageNamed:@"pass5.png" size:15 isLit:YES]; |
node.position = SCNVector3Make(-3, 5, 10.1); |
node.opacity = 0.0; |
[_pass3 addChildNode:node]; |
SCNNode *t0 = [SCNNode asc_planeNodeWithImageNamed:@"technique0.png" size:4 isLit:NO]; |
t0.position = SCNVector3Make(-8.5, 1.5, 10.1); |
t0.opacity = 0.0; |
[_pass3 addChildNode:t0]; |
SCNNode *t1 = [SCNNode asc_planeNodeWithImageNamed:@"technique1.png" size:4 isLit:NO]; |
t1.position = SCNVector3Make(-3.6, 1.5, 10.1); |
t1.opacity = 0.0; |
[_pass3 addChildNode:t1]; |
SCNNode *t2 = [SCNNode asc_planeNodeWithImageNamed:@"technique2.png" size:4 isLit:NO]; |
t2.position = SCNVector3Make(1.4, 1.5, 10.1); |
t2.opacity = 0.0; |
[_pass3 addChildNode:t2]; |
SCNNode *t3 = [SCNNode asc_planeNodeWithImageNamed:@"technique3.png" size:8 isLit:NO]; |
t3.position = SCNVector3Make(8, 5, 10.1); |
t3.opacity = 0.0; |
[_pass3 addChildNode:t3]; |
[[self contentNode] addChildNode:_pass3]; |
[SCNTransaction begin]; |
[SCNTransaction setAnimationDuration:0.75]; |
node.opacity = 1.0; |
t0.opacity = 1.0; |
t1.opacity = 1.0; |
t2.opacity = 1.0; |
t3.opacity = 1.0; |
[SCNTransaction commit]; |
} |
break; |
} |
} |
@end |
Copyright © 2014 Apple Inc. All Rights Reserved. Terms of Use | Privacy Policy | Updated: 2014-10-16