SlideShare uma empresa Scribd logo
1 de 41
Baixar para ler offline
A-Frame
aframe.io


Daosheng Mu
@mozilla
2016/01/08
https://goo.gl/de2YG1
About Me
• Six years experience in the game industry
• Contributor to three.js
• Working on Firefox OS TV product
• Responsible for Gaming, Graphics
@daoshengmu
Outline
• WebVR
• A-Frame
• Customize HTMLElement
• Entity-Component system
• Build own component
Mozilla VR team -
“Our goal is to help
bring high
performance virtual
reality to the open
web.”
Recap: WebVR
Recap: WebVR
Recap: WebVR
var leftEyeParams = vrHMD.getEyeParameters(‘left’);

var rightEyeParams = vrHMD.getEyeParameters(‘right’);
// In meters

var leftEyeTranslation = leftEyeParams.eyeTranslation; 

var rightEyeTranslation = rightEyeParams.eyeTranslation; 

var leftEyeFOV = leftEyeParams.recommendedFieldOfView; 

var rightEyeFOV = rightEyeParams.recommendedFieldOfView;
Recap: WebVR
function onRequestAnimationFrame() {

if ( vrPosSensor ) {

var state = vrPosSensor.getState();

if ( state.hasOrientation ) {

camera.quaternion.set(

state.orientation.x, state.orientation.y,

state.orientation.z, state.orientation.w);

}

}

render( camera ); 

}
Recap: WebVR
function render( camera ) {

// Left eye

setViewport( leftEyeParams );

setProjMatrix( leftEyeFOV );

setViewMatrix( camera.matrixWorld, leftEyeTranslation );

drawScene();

// Right eye

setViewport( rightEyeParams );

setProjMatrix( rightEyeFOV );

setViewMatrix( camera.matrixWorld, rightEyeTranslation );

drawScene();

}
Ready to WebVR 1.0?
• Refresh rate
• Fullscreen
• VR Gamepad
• Merge HMD/Pose
SUCCESS STORIES
A-Frame
Building blocks for the
virtual reality web
A-Frame
Demo
• VR Shopping
• 360 Video
• Panorama
A-Frame
• Building blocks for the virtual reality web
• Use markup to create VR experiences that work across desktop,
iPhones, and the Oculus Rift. Android support coming soon.
• Virtual Reality: Drop in the library and have a WebVR scene
within a few lines of markup.
• Based on the DOM: Manipulate with JavaScript, use with your
favorite libraries and frameworks.
• Entity-Component System: Use the entity-component system
for better composability and flexibility.
<a-entity geometry="primitive: cube; material="color:
pink”></a-entity>
webcomponents.js ?
webcomponents.js ?
“webcomponents.js is a set of polyfills built on top of the Web
Components specifications.”
•Custom Elements: Define new elements in HTML.
var Mytag = document.registerElement('my-tag');

document.body.appendChild(new Mytag());



var mytag = document.getElementsByTagName(‘my-tag’)[0];

mytag.textContent = ‘I am a my-tag element.’;
dom.webcomponents.enabled;true
X Cross-all-browsers
webcomponents.js ?
A-Framedocument-register-element.js



A stand-alone working lightweight version of the W3C
Custom Elements specification
var Mytag = document.registerElement(

'my-tag',

{

prototype: Object.create(

HTMLElement.prototype, {

})

}

);
A-Frame Core
A DOM-based Entity-Component System to
declaratively create 3D and VR worlds in the browser.
Entity-Component System is an architectural pattern
commonly used in game engines such as Unity,
PlayCanvas, an Unreal Engine 4+.
Elements

• Templates
• Events
Core

• Components
• Entity
• Scene
• Utils
aframe
aframe-core
<body>

<a-scene stats="true">

<a-entity geometry="primitive: box;"
material="color: #d00">

</a-entity>

</a-scene>

</body>
Scene
Entity
Component
Entity system in A-Frame
Entities are HTML elements (i.e., <a-entity>).
Components are HTML attributes that are set on
the entity.
<a-entity geometry="primitive: cube; depth: 1;
height: 1; width: 1"

material="color: pink”></a-entity>
<a-entity geometry="primitive: cube; depth: 1;
height: 1; width: 1"

material="color: pink”>

</a-entity>
<a-entity geometry="primitive: cube; depth: 1;
height: 1; width: 1"

material="color: pink” light="intensity: 2">

</a-entity>
<a-entity geometry="primitive: cube; depth: 1; 

height: 1; width: 1"

material="color: pink” 

light="intensity: 2” position="-1 5 0” 

sound="src: dangerzone.mp3; volume: 2">

</a-entity>
Entity
<a-entity>
• Entities are general purpose objects (e.g., to
create a player, monster, sky, or cube).
• They inherently have a position, rotation, and
scale in the scene.
Properties
- components
- sceneEl


Methods
- emit
- get/setAttribute
- getComputedAttribute
- removeAttribute


Events
- componentChanged
- loaded
Component
• Components are reusable and modular chunks
of data that modify an aspect of an entity,
changing its appearance, behavior, or
functionality.
Defining Component Data
<a-entity geometry="primitive: box; width: 5"></a-entity>
var entity = document.querySelector('a-entity');

entity.setAttribute('material', 'color: red');

entity.setAttribute('geometry', {primitive: 'box'});

entity.setAttribute('geometry', 'width', 5);
OR
Building a Component
require('aframe').registerComponent('vibrate', {
});
Building a Component
require('aframe').registerComponent('vibrate', {
});
init: function () {
this.animationEl
= null;
},
schema: {

dur: {

default: 20

},

offset: {

default: 0.01

}

},
update: function () {

var anim = document.createElement('a-
animation');

var position = this.el.getAttribute('position');

anim.setAttribute('attribute', 'position');

anim.setAttribute('direction', 'alternate');

anim.setAttribute('dur', this.data.dur);

anim.setAttribute('repeat', 'indefinite');

anim.setAttribute('to', position.x +
this.data.offset + ' ' + position.y +
this.data.offset + position.z +
this.data.offset);



…

remove: function () { 

if (this.animationEl) {

this.el.removeChild(

this.animationEl); 

}

}
Building a Component
• Implement Particle component
• three.js: points / sprites (http://threejs.org/
examples/#webgl_points_sprites)
• Add components/particle to index.js
• npm run dev
Scene
• Set up what to render, where to render, and is where all of the entities live.
• Initialization
• Creating a canvas
• Instantiating a renderer
• Attaching event and full screen listeners
• Setting up default lighting and camera
• Injecting <meta> tags and button to Enter VR
• Registering keyboard shortcuts
• Render Loop
• requestAnimationFrame
<a-scene>
AScene
three.js
Animation
<a-animation>
<a-entity geometry="primitive: box;" material="color: pink" position="0 0 0"
rotation="0 0 0">

<a-animation attribute="rotation" to="0 360 0" dur="3000" fill="forwards" 

repeat="indefinite">

</a-animation>

</a-entity>
Elements

• Templates
• Events
Core

• Components
• Entity
• Scene
• Utils
aframe
aframe-core
Primitives
Primitives are concise, semantic building blocks
that wrap A-Frame’s underlying entity-component
system.
<a-entity geometry="primitive: box; width: 3" material="color: red">

</a-entity>
<a-cube width="3" color="red"></a-cube>
Templates
• Templates package multiple entities or primitives
into a custom element for easy reuse.
<template is="a-template" element="a-lot-of-cubes">

<a-cube color="red" depth="1" height="1" width="1" position="-1 0 0">

</a-cube>

<a-cube color="blue" depth="1" height="1" width="1" position="0 1 0">

</a-cube>

<a-cube color="green" depth="1" height="1" width="1" position="1 0 0">

</a-cube>

</template>
<a-lot-of-cubes></a-lot-of-cubes>

<a-lot-of-cubes position="10 0 0"></a-lot-of-cubes>
Templates
<template is="a-template" element="a-lot-of-cubes" size="1">

<a-cube color="red" depth="${size}" height="${size}" width="${size}" 

position="-${size} 0 0"></a-cube>

<a-cube color="green" depth="${size}" height="${size}" width="${size}" 

position="-${size} 0 0"></a-cube>

<a-cube color="blue" depth="${size}" height="${size}" width="${size}" 

position="-${size} 0 0"></a-cube>

</template>
<a-lot-of-cubes size="5"></a-lot-of-cubes>

<a-lot-of-cubes position="10 0 0"></a-lot-of-cubes>
Mixin
<a-mixin>
• Mixins provide a way to compose and reuse
commonly-used sets of component properties.
<a-assets>

<a-mixin id="red" material="color: red"></a-mixin>

<a-mixin id="blue" material="color: blue"></a-mixin>

<a-mixin id="cube" geometry="primitive: box"></a-mixin>

</a-assets>

<a-scene>

<a-entity mixin="red cube"></a-entity>

<a-entity mixin="blue cube"></a-entity>

</a-scene>
Conclusion
• Next version of WebVR API is working on
• A-Frame provides developers a rapid way to
make WebVR content
• A-Frame makes “Write once, Run everywhere” to
be real
Platform Support
Oculus

Firefox
Android

Firefox
iOS

Safari
FxOS
HMD WebVR WebVR webvr-polyfill WebVR
Position WebVR X X X
Orientation WebVR WebVR
webvr-polyfill:
devicemotion
WebVR: but
quiet slow
Fullscreen WebVR
X distortion
correction
filter
X distortion
correction
filter
X distortion
correction
filter
Thanks for your attention

Mais conteúdo relacionado

Mais procurados

Introduction to react_js
Introduction to react_jsIntroduction to react_js
Introduction to react_jsMicroPyramid .
 
자바 서버 애플리케이션 아키텍처 안티 패턴
자바 서버 애플리케이션 아키텍처 안티 패턴자바 서버 애플리케이션 아키텍처 안티 패턴
자바 서버 애플리케이션 아키텍처 안티 패턴Sungchul Park
 
프론트엔드 개발자를 위한 Layer Model
프론트엔드 개발자를 위한 Layer Model프론트엔드 개발자를 위한 Layer Model
프론트엔드 개발자를 위한 Layer ModelHan Lee
 
쿠키런 1년, 서버개발 분투기
쿠키런 1년, 서버개발 분투기쿠키런 1년, 서버개발 분투기
쿠키런 1년, 서버개발 분투기Brian Hong
 
An introduction to React.js
An introduction to React.jsAn introduction to React.js
An introduction to React.jsEmanuele DelBono
 
Elastic Stack 을 이용한 게임 서비스 통합 로깅 플랫폼 - elastic{on} 2019 Seoul
Elastic Stack 을 이용한 게임 서비스 통합 로깅 플랫폼 - elastic{on} 2019 SeoulElastic Stack 을 이용한 게임 서비스 통합 로깅 플랫폼 - elastic{on} 2019 Seoul
Elastic Stack 을 이용한 게임 서비스 통합 로깅 플랫폼 - elastic{on} 2019 SeoulSeungYong Oh
 
ASP.NET MVC Presentation
ASP.NET MVC PresentationASP.NET MVC Presentation
ASP.NET MVC Presentationivpol
 
FIFA 온라인 3의 MongoDB 사용기
FIFA 온라인 3의 MongoDB 사용기FIFA 온라인 3의 MongoDB 사용기
FIFA 온라인 3의 MongoDB 사용기Jongwon Kim
 
아마존 클라우드와 함께한 1개월, 쿠키런 사례중심 (KGC 2013)
아마존 클라우드와 함께한 1개월, 쿠키런 사례중심 (KGC 2013)아마존 클라우드와 함께한 1개월, 쿠키런 사례중심 (KGC 2013)
아마존 클라우드와 함께한 1개월, 쿠키런 사례중심 (KGC 2013)Brian Hong
 
게임을 위한 최적의 AWS DB 서비스 선정 퀘스트 깨기::최유정::AWS Summit Seoul 2018
게임을 위한 최적의 AWS DB 서비스 선정 퀘스트 깨기::최유정::AWS Summit Seoul 2018 게임을 위한 최적의 AWS DB 서비스 선정 퀘스트 깨기::최유정::AWS Summit Seoul 2018
게임을 위한 최적의 AWS DB 서비스 선정 퀘스트 깨기::최유정::AWS Summit Seoul 2018 Amazon Web Services Korea
 
React.js 세미나
React.js 세미나React.js 세미나
React.js 세미나Briantina
 
React JS - A quick introduction tutorial
React JS - A quick introduction tutorialReact JS - A quick introduction tutorial
React JS - A quick introduction tutorialMohammed Fazuluddin
 

Mais procurados (20)

Introduction to react_js
Introduction to react_jsIntroduction to react_js
Introduction to react_js
 
자바 서버 애플리케이션 아키텍처 안티 패턴
자바 서버 애플리케이션 아키텍처 안티 패턴자바 서버 애플리케이션 아키텍처 안티 패턴
자바 서버 애플리케이션 아키텍처 안티 패턴
 
Its time to React.js
Its time to React.jsIts time to React.js
Its time to React.js
 
React
React React
React
 
프론트엔드 개발자를 위한 Layer Model
프론트엔드 개발자를 위한 Layer Model프론트엔드 개발자를 위한 Layer Model
프론트엔드 개발자를 위한 Layer Model
 
쿠키런 1년, 서버개발 분투기
쿠키런 1년, 서버개발 분투기쿠키런 1년, 서버개발 분투기
쿠키런 1년, 서버개발 분투기
 
An introduction to React.js
An introduction to React.jsAn introduction to React.js
An introduction to React.js
 
WebSockets with Spring 4
WebSockets with Spring 4WebSockets with Spring 4
WebSockets with Spring 4
 
Elastic Stack 을 이용한 게임 서비스 통합 로깅 플랫폼 - elastic{on} 2019 Seoul
Elastic Stack 을 이용한 게임 서비스 통합 로깅 플랫폼 - elastic{on} 2019 SeoulElastic Stack 을 이용한 게임 서비스 통합 로깅 플랫폼 - elastic{on} 2019 Seoul
Elastic Stack 을 이용한 게임 서비스 통합 로깅 플랫폼 - elastic{on} 2019 Seoul
 
ASP.NET MVC Presentation
ASP.NET MVC PresentationASP.NET MVC Presentation
ASP.NET MVC Presentation
 
FIFA 온라인 3의 MongoDB 사용기
FIFA 온라인 3의 MongoDB 사용기FIFA 온라인 3의 MongoDB 사용기
FIFA 온라인 3의 MongoDB 사용기
 
아마존 클라우드와 함께한 1개월, 쿠키런 사례중심 (KGC 2013)
아마존 클라우드와 함께한 1개월, 쿠키런 사례중심 (KGC 2013)아마존 클라우드와 함께한 1개월, 쿠키런 사례중심 (KGC 2013)
아마존 클라우드와 함께한 1개월, 쿠키런 사례중심 (KGC 2013)
 
React js
React jsReact js
React js
 
Basics of VueJS
Basics of VueJSBasics of VueJS
Basics of VueJS
 
WebGL and three.js
WebGL and three.jsWebGL and three.js
WebGL and three.js
 
게임을 위한 최적의 AWS DB 서비스 선정 퀘스트 깨기::최유정::AWS Summit Seoul 2018
게임을 위한 최적의 AWS DB 서비스 선정 퀘스트 깨기::최유정::AWS Summit Seoul 2018 게임을 위한 최적의 AWS DB 서비스 선정 퀘스트 깨기::최유정::AWS Summit Seoul 2018
게임을 위한 최적의 AWS DB 서비스 선정 퀘스트 깨기::최유정::AWS Summit Seoul 2018
 
React.js 세미나
React.js 세미나React.js 세미나
React.js 세미나
 
Aem maintenance
Aem maintenanceAem maintenance
Aem maintenance
 
React JS - A quick introduction tutorial
React JS - A quick introduction tutorialReact JS - A quick introduction tutorial
React JS - A quick introduction tutorial
 
JSON Schema Design
JSON Schema DesignJSON Schema Design
JSON Schema Design
 

Semelhante a Building blocks for the virtual reality web with A-Frame

Developing Lightning Components for Communities.pptx
Developing Lightning Components for Communities.pptxDeveloping Lightning Components for Communities.pptx
Developing Lightning Components for Communities.pptxDmitry Vinnik
 
A frame beginner lesson
A frame beginner lessonA frame beginner lesson
A frame beginner lessonDaosheng Mu
 
SenchaCon 2016: Building a Faceted Catalog of Video Game Assets Using Ext JS ...
SenchaCon 2016: Building a Faceted Catalog of Video Game Assets Using Ext JS ...SenchaCon 2016: Building a Faceted Catalog of Video Game Assets Using Ext JS ...
SenchaCon 2016: Building a Faceted Catalog of Video Game Assets Using Ext JS ...Sencha
 
An Introduction to Web Components
An Introduction to Web ComponentsAn Introduction to Web Components
An Introduction to Web ComponentsRed Pill Now
 
Building AR and VR Experiences for Web Apps with JavaScript
Building AR and VR Experiences for Web Apps with JavaScriptBuilding AR and VR Experiences for Web Apps with JavaScript
Building AR and VR Experiences for Web Apps with JavaScriptFITC
 
Session on Selenium Powertools by Unmesh Gundecha
Session on Selenium Powertools by Unmesh GundechaSession on Selenium Powertools by Unmesh Gundecha
Session on Selenium Powertools by Unmesh GundechaAgile Testing Alliance
 
Web Performance Part 4 "Client-side performance"
Web Performance Part 4  "Client-side performance"Web Performance Part 4  "Client-side performance"
Web Performance Part 4 "Client-side performance"Binary Studio
 
From MEAN to the MERN Stack
From MEAN to the MERN StackFrom MEAN to the MERN Stack
From MEAN to the MERN StackTroy Miles
 
Detecting headless browsers
Detecting headless browsersDetecting headless browsers
Detecting headless browsersSergey Shekyan
 
Intro To webOS
Intro To webOSIntro To webOS
Intro To webOSfpatton
 
JavaScript 2.0 in Dreamweaver CS4
JavaScript 2.0 in Dreamweaver CS4JavaScript 2.0 in Dreamweaver CS4
JavaScript 2.0 in Dreamweaver CS4alexsaves
 
Knowledge of web ui for automation testing
Knowledge  of web ui for automation testingKnowledge  of web ui for automation testing
Knowledge of web ui for automation testingArtem Korchevyi
 
#NewMeetup Performance
#NewMeetup Performance#NewMeetup Performance
#NewMeetup PerformanceJustin Cataldo
 
Angular server side rendering - Strategies & Technics
Angular server side rendering - Strategies & Technics Angular server side rendering - Strategies & Technics
Angular server side rendering - Strategies & Technics Eliran Eliassy
 

Semelhante a Building blocks for the virtual reality web with A-Frame (20)

Ferguson VR Hackathon - May 6, 2017
Ferguson VR Hackathon - May 6, 2017Ferguson VR Hackathon - May 6, 2017
Ferguson VR Hackathon - May 6, 2017
 
Developing Lightning Components for Communities.pptx
Developing Lightning Components for Communities.pptxDeveloping Lightning Components for Communities.pptx
Developing Lightning Components for Communities.pptx
 
Presentation Tier optimizations
Presentation Tier optimizationsPresentation Tier optimizations
Presentation Tier optimizations
 
A frame beginner lesson
A frame beginner lessonA frame beginner lesson
A frame beginner lesson
 
Lightning chess
Lightning chessLightning chess
Lightning chess
 
SenchaCon 2016: Building a Faceted Catalog of Video Game Assets Using Ext JS ...
SenchaCon 2016: Building a Faceted Catalog of Video Game Assets Using Ext JS ...SenchaCon 2016: Building a Faceted Catalog of Video Game Assets Using Ext JS ...
SenchaCon 2016: Building a Faceted Catalog of Video Game Assets Using Ext JS ...
 
An Introduction to Web Components
An Introduction to Web ComponentsAn Introduction to Web Components
An Introduction to Web Components
 
Building AR and VR Experiences for Web Apps with JavaScript
Building AR and VR Experiences for Web Apps with JavaScriptBuilding AR and VR Experiences for Web Apps with JavaScript
Building AR and VR Experiences for Web Apps with JavaScript
 
Session on Selenium Powertools by Unmesh Gundecha
Session on Selenium Powertools by Unmesh GundechaSession on Selenium Powertools by Unmesh Gundecha
Session on Selenium Powertools by Unmesh Gundecha
 
Web Performance Part 4 "Client-side performance"
Web Performance Part 4  "Client-side performance"Web Performance Part 4  "Client-side performance"
Web Performance Part 4 "Client-side performance"
 
From MEAN to the MERN Stack
From MEAN to the MERN StackFrom MEAN to the MERN Stack
From MEAN to the MERN Stack
 
Detecting headless browsers
Detecting headless browsersDetecting headless browsers
Detecting headless browsers
 
Intro To webOS
Intro To webOSIntro To webOS
Intro To webOS
 
JavaScript 2.0 in Dreamweaver CS4
JavaScript 2.0 in Dreamweaver CS4JavaScript 2.0 in Dreamweaver CS4
JavaScript 2.0 in Dreamweaver CS4
 
Intro to HTML5
Intro to HTML5Intro to HTML5
Intro to HTML5
 
Node azure
Node azureNode azure
Node azure
 
Knowledge of web ui for automation testing
Knowledge  of web ui for automation testingKnowledge  of web ui for automation testing
Knowledge of web ui for automation testing
 
Blazor
BlazorBlazor
Blazor
 
#NewMeetup Performance
#NewMeetup Performance#NewMeetup Performance
#NewMeetup Performance
 
Angular server side rendering - Strategies & Technics
Angular server side rendering - Strategies & Technics Angular server side rendering - Strategies & Technics
Angular server side rendering - Strategies & Technics
 

Mais de Daosheng Mu

Introduction to WebGL and WebVR
Introduction to WebGL and WebVRIntroduction to WebGL and WebVR
Introduction to WebGL and WebVRDaosheng Mu
 
Using The New Flash Stage3D Web Technology To Build Your Own Next 3D Browser ...
Using The New Flash Stage3D Web Technology To Build Your Own Next 3D Browser ...Using The New Flash Stage3D Web Technology To Build Your Own Next 3D Browser ...
Using The New Flash Stage3D Web Technology To Build Your Own Next 3D Browser ...Daosheng Mu
 
Introduce to 3d rendering engine
Introduce to 3d rendering engineIntroduce to 3d rendering engine
Introduce to 3d rendering engineDaosheng Mu
 
Order independent transparency
Order independent transparencyOrder independent transparency
Order independent transparencyDaosheng Mu
 
Design your 3d game engine
Design your 3d game engineDesign your 3d game engine
Design your 3d game engineDaosheng Mu
 

Mais de Daosheng Mu (8)

Webrender 1.0
Webrender 1.0Webrender 1.0
Webrender 1.0
 
Maze VR
Maze VRMaze VR
Maze VR
 
Introduction to WebGL and WebVR
Introduction to WebGL and WebVRIntroduction to WebGL and WebVR
Introduction to WebGL and WebVR
 
Using The New Flash Stage3D Web Technology To Build Your Own Next 3D Browser ...
Using The New Flash Stage3D Web Technology To Build Your Own Next 3D Browser ...Using The New Flash Stage3D Web Technology To Build Your Own Next 3D Browser ...
Using The New Flash Stage3D Web Technology To Build Your Own Next 3D Browser ...
 
Introduce to 3d rendering engine
Introduce to 3d rendering engineIntroduce to 3d rendering engine
Introduce to 3d rendering engine
 
Direct3D to WPF
Direct3D to WPFDirect3D to WPF
Direct3D to WPF
 
Order independent transparency
Order independent transparencyOrder independent transparency
Order independent transparency
 
Design your 3d game engine
Design your 3d game engineDesign your 3d game engine
Design your 3d game engine
 

Último

Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxKatpro Technologies
 
Maximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxMaximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxOnBoard
 
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024BookNet Canada
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreternaman860154
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsMark Billinghurst
 
Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Paola De la Torre
 
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Alan Dix
 
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 3652toLead Limited
 
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...shyamraj55
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsMemoori
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationMichael W. Hawkins
 
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024BookNet Canada
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsMaria Levchenko
 
Azure Monitor & Application Insight to monitor Infrastructure & Application
Azure Monitor & Application Insight to monitor Infrastructure & ApplicationAzure Monitor & Application Insight to monitor Infrastructure & Application
Azure Monitor & Application Insight to monitor Infrastructure & ApplicationAndikSusilo4
 
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersEnhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersThousandEyes
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationRidwan Fadjar
 
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...HostedbyConfluent
 
Pigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping ElbowsPigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping ElbowsPigging Solutions
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxMalak Abu Hammad
 
Benefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other FrameworksBenefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other FrameworksSoftradix Technologies
 

Último (20)

Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
 
Maximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxMaximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptx
 
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR Systems
 
Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101
 
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
 
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
 
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial Buildings
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
Azure Monitor & Application Insight to monitor Infrastructure & Application
Azure Monitor & Application Insight to monitor Infrastructure & ApplicationAzure Monitor & Application Insight to monitor Infrastructure & Application
Azure Monitor & Application Insight to monitor Infrastructure & Application
 
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersEnhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 Presentation
 
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
 
Pigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping ElbowsPigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping Elbows
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptx
 
Benefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other FrameworksBenefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other Frameworks
 

Building blocks for the virtual reality web with A-Frame

  • 2. About Me • Six years experience in the game industry • Contributor to three.js • Working on Firefox OS TV product • Responsible for Gaming, Graphics @daoshengmu
  • 3. Outline • WebVR • A-Frame • Customize HTMLElement • Entity-Component system • Build own component
  • 4. Mozilla VR team - “Our goal is to help bring high performance virtual reality to the open web.”
  • 7. Recap: WebVR var leftEyeParams = vrHMD.getEyeParameters(‘left’);
 var rightEyeParams = vrHMD.getEyeParameters(‘right’); // In meters
 var leftEyeTranslation = leftEyeParams.eyeTranslation; 
 var rightEyeTranslation = rightEyeParams.eyeTranslation; 
 var leftEyeFOV = leftEyeParams.recommendedFieldOfView; 
 var rightEyeFOV = rightEyeParams.recommendedFieldOfView;
  • 8. Recap: WebVR function onRequestAnimationFrame() {
 if ( vrPosSensor ) {
 var state = vrPosSensor.getState();
 if ( state.hasOrientation ) {
 camera.quaternion.set(
 state.orientation.x, state.orientation.y,
 state.orientation.z, state.orientation.w);
 }
 }
 render( camera ); 
 }
  • 9. Recap: WebVR function render( camera ) {
 // Left eye
 setViewport( leftEyeParams );
 setProjMatrix( leftEyeFOV );
 setViewMatrix( camera.matrixWorld, leftEyeTranslation );
 drawScene();
 // Right eye
 setViewport( rightEyeParams );
 setProjMatrix( rightEyeFOV );
 setViewMatrix( camera.matrixWorld, rightEyeTranslation );
 drawScene();
 }
  • 10. Ready to WebVR 1.0? • Refresh rate • Fullscreen • VR Gamepad • Merge HMD/Pose
  • 12. A-Frame Building blocks for the virtual reality web
  • 13. A-Frame Demo • VR Shopping • 360 Video • Panorama
  • 14. A-Frame • Building blocks for the virtual reality web • Use markup to create VR experiences that work across desktop, iPhones, and the Oculus Rift. Android support coming soon. • Virtual Reality: Drop in the library and have a WebVR scene within a few lines of markup. • Based on the DOM: Manipulate with JavaScript, use with your favorite libraries and frameworks. • Entity-Component System: Use the entity-component system for better composability and flexibility.
  • 15. <a-entity geometry="primitive: cube; material="color: pink”></a-entity> webcomponents.js ?
  • 16. webcomponents.js ? “webcomponents.js is a set of polyfills built on top of the Web Components specifications.” •Custom Elements: Define new elements in HTML. var Mytag = document.registerElement('my-tag');
 document.body.appendChild(new Mytag());
 
 var mytag = document.getElementsByTagName(‘my-tag’)[0];
 mytag.textContent = ‘I am a my-tag element.’; dom.webcomponents.enabled;true X Cross-all-browsers
  • 17. webcomponents.js ? A-Framedocument-register-element.js
 
 A stand-alone working lightweight version of the W3C Custom Elements specification var Mytag = document.registerElement(
 'my-tag',
 {
 prototype: Object.create(
 HTMLElement.prototype, {
 })
 }
 );
  • 18. A-Frame Core A DOM-based Entity-Component System to declaratively create 3D and VR worlds in the browser. Entity-Component System is an architectural pattern commonly used in game engines such as Unity, PlayCanvas, an Unreal Engine 4+.
  • 19. Elements
 • Templates • Events Core
 • Components • Entity • Scene • Utils aframe aframe-core
  • 20. <body>
 <a-scene stats="true">
 <a-entity geometry="primitive: box;" material="color: #d00">
 </a-entity>
 </a-scene>
 </body> Scene Entity Component
  • 21. Entity system in A-Frame Entities are HTML elements (i.e., <a-entity>). Components are HTML attributes that are set on the entity. <a-entity geometry="primitive: cube; depth: 1; height: 1; width: 1"
 material="color: pink”></a-entity>
  • 22. <a-entity geometry="primitive: cube; depth: 1; height: 1; width: 1"
 material="color: pink”>
 </a-entity>
  • 23. <a-entity geometry="primitive: cube; depth: 1; height: 1; width: 1"
 material="color: pink” light="intensity: 2">
 </a-entity>
  • 24. <a-entity geometry="primitive: cube; depth: 1; 
 height: 1; width: 1"
 material="color: pink” 
 light="intensity: 2” position="-1 5 0” 
 sound="src: dangerzone.mp3; volume: 2">
 </a-entity>
  • 25.
  • 26. Entity <a-entity> • Entities are general purpose objects (e.g., to create a player, monster, sky, or cube). • They inherently have a position, rotation, and scale in the scene. Properties - components - sceneEl 
 Methods - emit - get/setAttribute - getComputedAttribute - removeAttribute 
 Events - componentChanged - loaded
  • 27. Component • Components are reusable and modular chunks of data that modify an aspect of an entity, changing its appearance, behavior, or functionality.
  • 28. Defining Component Data <a-entity geometry="primitive: box; width: 5"></a-entity> var entity = document.querySelector('a-entity');
 entity.setAttribute('material', 'color: red');
 entity.setAttribute('geometry', {primitive: 'box'});
 entity.setAttribute('geometry', 'width', 5); OR
  • 30. Building a Component require('aframe').registerComponent('vibrate', { }); init: function () { this.animationEl = null; }, schema: {
 dur: {
 default: 20
 },
 offset: {
 default: 0.01
 }
 }, update: function () {
 var anim = document.createElement('a- animation');
 var position = this.el.getAttribute('position');
 anim.setAttribute('attribute', 'position');
 anim.setAttribute('direction', 'alternate');
 anim.setAttribute('dur', this.data.dur);
 anim.setAttribute('repeat', 'indefinite');
 anim.setAttribute('to', position.x + this.data.offset + ' ' + position.y + this.data.offset + position.z + this.data.offset);
 
 …
 remove: function () { 
 if (this.animationEl) {
 this.el.removeChild(
 this.animationEl); 
 }
 }
  • 31. Building a Component • Implement Particle component • three.js: points / sprites (http://threejs.org/ examples/#webgl_points_sprites) • Add components/particle to index.js • npm run dev
  • 32. Scene • Set up what to render, where to render, and is where all of the entities live. • Initialization • Creating a canvas • Instantiating a renderer • Attaching event and full screen listeners • Setting up default lighting and camera • Injecting <meta> tags and button to Enter VR • Registering keyboard shortcuts • Render Loop • requestAnimationFrame <a-scene> AScene three.js
  • 33. Animation <a-animation> <a-entity geometry="primitive: box;" material="color: pink" position="0 0 0" rotation="0 0 0">
 <a-animation attribute="rotation" to="0 360 0" dur="3000" fill="forwards" 
 repeat="indefinite">
 </a-animation>
 </a-entity>
  • 34. Elements
 • Templates • Events Core
 • Components • Entity • Scene • Utils aframe aframe-core
  • 35. Primitives Primitives are concise, semantic building blocks that wrap A-Frame’s underlying entity-component system. <a-entity geometry="primitive: box; width: 3" material="color: red">
 </a-entity> <a-cube width="3" color="red"></a-cube>
  • 36. Templates • Templates package multiple entities or primitives into a custom element for easy reuse. <template is="a-template" element="a-lot-of-cubes">
 <a-cube color="red" depth="1" height="1" width="1" position="-1 0 0">
 </a-cube>
 <a-cube color="blue" depth="1" height="1" width="1" position="0 1 0">
 </a-cube>
 <a-cube color="green" depth="1" height="1" width="1" position="1 0 0">
 </a-cube>
 </template> <a-lot-of-cubes></a-lot-of-cubes>
 <a-lot-of-cubes position="10 0 0"></a-lot-of-cubes>
  • 37. Templates <template is="a-template" element="a-lot-of-cubes" size="1">
 <a-cube color="red" depth="${size}" height="${size}" width="${size}" 
 position="-${size} 0 0"></a-cube>
 <a-cube color="green" depth="${size}" height="${size}" width="${size}" 
 position="-${size} 0 0"></a-cube>
 <a-cube color="blue" depth="${size}" height="${size}" width="${size}" 
 position="-${size} 0 0"></a-cube>
 </template> <a-lot-of-cubes size="5"></a-lot-of-cubes>
 <a-lot-of-cubes position="10 0 0"></a-lot-of-cubes>
  • 38. Mixin <a-mixin> • Mixins provide a way to compose and reuse commonly-used sets of component properties. <a-assets>
 <a-mixin id="red" material="color: red"></a-mixin>
 <a-mixin id="blue" material="color: blue"></a-mixin>
 <a-mixin id="cube" geometry="primitive: box"></a-mixin>
 </a-assets>
 <a-scene>
 <a-entity mixin="red cube"></a-entity>
 <a-entity mixin="blue cube"></a-entity>
 </a-scene>
  • 39. Conclusion • Next version of WebVR API is working on • A-Frame provides developers a rapid way to make WebVR content • A-Frame makes “Write once, Run everywhere” to be real
  • 40. Platform Support Oculus
 Firefox Android
 Firefox iOS
 Safari FxOS HMD WebVR WebVR webvr-polyfill WebVR Position WebVR X X X Orientation WebVR WebVR webvr-polyfill: devicemotion WebVR: but quiet slow Fullscreen WebVR X distortion correction filter X distortion correction filter X distortion correction filter
  • 41. Thanks for your attention