Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
EmberConf 2017 Ember VR
Search
Kelly Selden
March 29, 2017
440
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
EmberConf 2017 Ember VR
Kelly Selden
March 29, 2017
Featured
See All Featured
Paper Plane (Part 1)
katiecoart
PRO
2
11k
Claude Code どこまでも/ Claude Code Everywhere
nwiizo
68
58k
Game over? The fight for quality and originality in the time of robots
wayneb77
1
300
Discover your Explorer Soul
emna__ayadi
2
1.3k
Leo the Paperboy
mayatellez
10
2.4k
Designing for humans not robots
tammielis
254
26k
Jamie Indigo - Trashchat’s Guide to Black Boxes: Technical SEO Tactics for LLMs
techseoconnect
PRO
0
690
The Cost Of JavaScript in 2023
addyosmani
55
10k
AI: The stuff that nobody shows you
jnunemaker
PRO
10
1.1k
Applied NLP in the Age of Generative AI
inesmontani
PRO
4
2.5k
Java REST API Framework Comparison - PWX 2021
mraible
34
9.7k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.8k
Transcript
Ember + VR: Bring Your A-Frame Kelly Selden @kellyselden
<a-scene> <a-sphere position="0 1.25 -1" radius="1.25" color="#EF2D5E"> </a-sphere> <a-box position="-1
0.5 1" rotation="0 45 0" width="1" height="1" depth="1" color="#4CC3D9"> </a-box> <a-cylinder position="1 0.75 1" radius="0.5" height="1.5" color="#FFC65D"> </a-cylinder> <a-plane rotation="-90 0 0" width="4" height="4" color="#7BC8A4"> </a-plane> <a-sky color="#ECECEC"></a-sky> <a-entity position="0 0 3.8"> <a-camera></a-camera> </a-entity> </a-scene> A-Frame
None
<a-scene> <a-sphere position="0 1.25 -1" radius="1.25" color="#EF2D5E"> </a-sphere> <a-box position="-1
0.5 1" rotation="0 45 0" width="1" height="1" depth="1" color="#4CC3D9"> </a-box> <a-cylinder position="1 0.75 1" radius="0.5" height="1.5" color="#FFC65D"> </a-cylinder> <a-plane rotation="-90 0 0" width="4" height="4" color="#7BC8A4"> </a-plane> <a-sky color="#ECECEC"></a-sky> <a-entity position="0 0 3.8"> <a-camera></a-camera> </a-entity> </a-scene> A-Frame + Ember
A-Frame + Ember + Components {{a-scene}} {{a-sphere position="0 1.25 -1"
radius="1.25" color=“#EF2D5E”}} {{a-box position="-1 0.5 1" rotation="0 45 0" width="1" height="1" depth="1" color="#4CC3D9"}} {{a-cylinder position="1 0.75 1" radius="0.5" height="1.5" color="#FFC65D"}} {{a-plane rotation="-90 0 0" width="4" height="4" color="#7BC8A4"}} {{a-sky color="#ECECEC"}} {{#a-entity position="0 0 3.8"}} {{a-camera}} {{/a-entity}} {{/a-scene}}
Routing
None
Components import ASky from 'ember-a-frame/components/a-sky'; import stringifyComponent from 'ember-a-frame/macros/stringify-component'; import
raw from 'ember-macro-helpers/raw'; import { task, timeout } from 'ember-concurrency'; export default ASky.extend({ animation: stringifyComponent('animation', { property: raw('material.color'), startEvents: raw('set-image-fade'), dir: raw('alternate'), dur: 'dur', from: raw('#FFF'), to: raw('#000') }), changeMaterialTask: task(function * (src) { yield timeout(this.get('dur')); this.sendAction('changeMaterial', src); }), actions: { startChangingMaterial(src) { this.element.emit('run-animation'); this.get('changeMaterialTask').perform(src); } } });
Components import ASky from 'ember-a-frame/components/a-sky'; import stringifyComponent from 'ember-a-frame/macros/stringify-component'; import
raw from 'ember-macro-helpers/raw'; import { task, timeout } from 'ember-concurrency'; export default ASky.extend({ animation: stringifyComponent('animation', { property: raw('material.color'), startEvents: raw('set-image-fade'), dir: raw('alternate'), dur: 'dur', from: raw('#FFF'), to: raw('#000') }), changeMaterialTask: task(function * (src) { yield timeout(this.get('dur')); this.sendAction('changeMaterial', src); }), actions: { startChangingMaterial(src) { this.element.emit('run-animation'); this.get('changeMaterialTask').perform(src); } } });
Components import ASky from 'ember-a-frame/components/a-sky'; import stringifyComponent from 'ember-a-frame/macros/stringify-component'; import
raw from 'ember-macro-helpers/raw'; import { task, timeout } from 'ember-concurrency'; export default ASky.extend({ animation: stringifyComponent('animation', { property: raw('material.color'), startEvents: raw('set-image-fade'), dir: raw('alternate'), dur: 'dur', from: raw('#FFF'), to: raw('#000') }), changeMaterialTask: task(function * (src) { yield timeout(this.get('dur')); this.sendAction('changeMaterial', src); }), actions: { startChangingMaterial(src) { this.element.emit('run-animation'); this.get('changeMaterialTask').perform(src); } } });
Components import ASky from 'ember-a-frame/components/a-sky'; import stringifyComponent from 'ember-a-frame/macros/stringify-component'; import
raw from 'ember-macro-helpers/raw'; import { task, timeout } from 'ember-concurrency'; export default ASky.extend({ animation: stringifyComponent('animation', { property: raw('material.color'), startEvents: raw('set-image-fade'), dir: raw('alternate'), dur: 'dur', from: raw('#FFF'), to: raw('#000') }), changeMaterialTask: task(function * (src) { yield timeout(this.get('dur')); this.sendAction('changeMaterial', src); }), actions: { startChangingMaterial(src) { this.element.emit('run-animation'); this.get('changeMaterialTask').perform(src); } } });
Components import ASky from 'ember-a-frame/components/a-sky'; import stringifyComponent from 'ember-a-frame/macros/stringify-component'; import
raw from 'ember-macro-helpers/raw'; import { task, timeout } from 'ember-concurrency'; export default ASky.extend({ animation: stringifyComponent('animation', { property: raw('material.color'), startEvents: raw('set-image-fade'), dir: raw('alternate'), dur: 'dur', from: raw('#FFF'), to: raw('#000') }), changeMaterialTask: task(function * (src) { yield timeout(this.get('dur')); this.sendAction('changeMaterial', src); }), actions: { startChangingMaterial(src) { this.element.emit('run-animation'); this.get('changeMaterialTask').perform(src); } } });
Templates
None
Macros and Helpers
ember-concurrency • Updating query params • Sending location data •
Scheduling something to run
Social Browsing
Side Note: API Synchronization •Last resort is to maintain a
copied API •Initializers register components? •Solution: Broccoli!
Thank you! github.com/kellyselden/ember-a-frame To mingle with your neighbors in VR:
kellyselden.github.io/ember-a-frame or bit.ly/2nYBYtR