SlideShare una empresa de Scribd logo
1 de 41
Descargar para leer sin conexión
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

Más contenido relacionado

La actualidad más candente

GameInstance에 대해서 알아보자
GameInstance에 대해서 알아보자GameInstance에 대해서 알아보자
GameInstance에 대해서 알아보자TonyCms
 
[Final] ReactJS presentation
[Final] ReactJS presentation[Final] ReactJS presentation
[Final] ReactJS presentation洪 鹏发
 
190119 unreal engine c++ 입문 및 팁
190119 unreal engine c++ 입문 및 팁190119 unreal engine c++ 입문 및 팁
190119 unreal engine c++ 입문 및 팁KWANGIL KIM
 
Angular Data Binding
Angular Data BindingAngular Data Binding
Angular Data BindingDuy Khanh
 
UI아트 작업자를 위한 언리얼엔진4 UMG #1
UI아트 작업자를 위한 언리얼엔진4 UMG #1UI아트 작업자를 위한 언리얼엔진4 UMG #1
UI아트 작업자를 위한 언리얼엔진4 UMG #1Hong-Gi Joe
 
AAA게임_UI_최적화_및_빌드하기.pptx
AAA게임_UI_최적화_및_빌드하기.pptxAAA게임_UI_최적화_및_빌드하기.pptx
AAA게임_UI_최적화_및_빌드하기.pptxTonyCms
 
West Coast DevCon 2014: Game Programming in UE4 - Game Framework & Sample Pro...
West Coast DevCon 2014: Game Programming in UE4 - Game Framework & Sample Pro...West Coast DevCon 2014: Game Programming in UE4 - Game Framework & Sample Pro...
West Coast DevCon 2014: Game Programming in UE4 - Game Framework & Sample Pro...Gerke Max Preussner
 
Comp 4010 2021 Lecture1-Introduction to XR
Comp 4010 2021 Lecture1-Introduction to XRComp 4010 2021 Lecture1-Introduction to XR
Comp 4010 2021 Lecture1-Introduction to XRMark Billinghurst
 
Umg ,이벤트 바인딩, Invaidation Box
Umg ,이벤트 바인딩, Invaidation BoxUmg ,이벤트 바인딩, Invaidation Box
Umg ,이벤트 바인딩, Invaidation Box대영 노
 
언리얼을 활용한 오브젝트 풀링
언리얼을 활용한 오브젝트 풀링언리얼을 활용한 오브젝트 풀링
언리얼을 활용한 오브젝트 풀링TonyCms
 
[IGC2018] 에픽게임즈 신광섭 - 언리얼엔진4 포트나이트 멀티플랫폼 개발 지원
[IGC2018] 에픽게임즈 신광섭 - 언리얼엔진4 포트나이트 멀티플랫폼 개발 지원[IGC2018] 에픽게임즈 신광섭 - 언리얼엔진4 포트나이트 멀티플랫폼 개발 지원
[IGC2018] 에픽게임즈 신광섭 - 언리얼엔진4 포트나이트 멀티플랫폼 개발 지원강 민우
 
PWA 與 Service Worker
PWA 與 Service WorkerPWA 與 Service Worker
PWA 與 Service WorkerAnna Su
 
Introduction to React JS for beginners
Introduction to React JS for beginners Introduction to React JS for beginners
Introduction to React JS for beginners Varun Raj
 
NDC2017 언리얼엔진4 디버깅 101 - 게임 기획자, 프로그래머가 버그와 만났을 때 사용할 수 있는 지침들
NDC2017 언리얼엔진4 디버깅 101 - 게임 기획자, 프로그래머가 버그와 만났을 때 사용할 수 있는 지침들NDC2017 언리얼엔진4 디버깅 101 - 게임 기획자, 프로그래머가 버그와 만났을 때 사용할 수 있는 지침들
NDC2017 언리얼엔진4 디버깅 101 - 게임 기획자, 프로그래머가 버그와 만났을 때 사용할 수 있는 지침들영욱 오
 
C#을 사용한 빠른 툴 개발
C#을 사용한 빠른 툴 개발C#을 사용한 빠른 툴 개발
C#을 사용한 빠른 툴 개발흥배 최
 

La actualidad más candente (20)

GameInstance에 대해서 알아보자
GameInstance에 대해서 알아보자GameInstance에 대해서 알아보자
GameInstance에 대해서 알아보자
 
[Final] ReactJS presentation
[Final] ReactJS presentation[Final] ReactJS presentation
[Final] ReactJS presentation
 
190119 unreal engine c++ 입문 및 팁
190119 unreal engine c++ 입문 및 팁190119 unreal engine c++ 입문 및 팁
190119 unreal engine c++ 입문 및 팁
 
Angular Data Binding
Angular Data BindingAngular Data Binding
Angular Data Binding
 
Vue, vue router, vuex
Vue, vue router, vuexVue, vue router, vuex
Vue, vue router, vuex
 
UI아트 작업자를 위한 언리얼엔진4 UMG #1
UI아트 작업자를 위한 언리얼엔진4 UMG #1UI아트 작업자를 위한 언리얼엔진4 UMG #1
UI아트 작업자를 위한 언리얼엔진4 UMG #1
 
AAA게임_UI_최적화_및_빌드하기.pptx
AAA게임_UI_최적화_및_빌드하기.pptxAAA게임_UI_최적화_및_빌드하기.pptx
AAA게임_UI_최적화_및_빌드하기.pptx
 
West Coast DevCon 2014: Game Programming in UE4 - Game Framework & Sample Pro...
West Coast DevCon 2014: Game Programming in UE4 - Game Framework & Sample Pro...West Coast DevCon 2014: Game Programming in UE4 - Game Framework & Sample Pro...
West Coast DevCon 2014: Game Programming in UE4 - Game Framework & Sample Pro...
 
Comp 4010 2021 Lecture1-Introduction to XR
Comp 4010 2021 Lecture1-Introduction to XRComp 4010 2021 Lecture1-Introduction to XR
Comp 4010 2021 Lecture1-Introduction to XR
 
React js
React jsReact js
React js
 
Umg ,이벤트 바인딩, Invaidation Box
Umg ,이벤트 바인딩, Invaidation BoxUmg ,이벤트 바인딩, Invaidation Box
Umg ,이벤트 바인딩, Invaidation Box
 
언리얼을 활용한 오브젝트 풀링
언리얼을 활용한 오브젝트 풀링언리얼을 활용한 오브젝트 풀링
언리얼을 활용한 오브젝트 풀링
 
Flutter
FlutterFlutter
Flutter
 
[IGC2018] 에픽게임즈 신광섭 - 언리얼엔진4 포트나이트 멀티플랫폼 개발 지원
[IGC2018] 에픽게임즈 신광섭 - 언리얼엔진4 포트나이트 멀티플랫폼 개발 지원[IGC2018] 에픽게임즈 신광섭 - 언리얼엔진4 포트나이트 멀티플랫폼 개발 지원
[IGC2018] 에픽게임즈 신광섭 - 언리얼엔진4 포트나이트 멀티플랫폼 개발 지원
 
PWA 與 Service Worker
PWA 與 Service WorkerPWA 與 Service Worker
PWA 與 Service Worker
 
Introduction to React JS for beginners
Introduction to React JS for beginners Introduction to React JS for beginners
Introduction to React JS for beginners
 
Augmented reality..
Augmented reality..Augmented reality..
Augmented reality..
 
NDC2017 언리얼엔진4 디버깅 101 - 게임 기획자, 프로그래머가 버그와 만났을 때 사용할 수 있는 지침들
NDC2017 언리얼엔진4 디버깅 101 - 게임 기획자, 프로그래머가 버그와 만났을 때 사용할 수 있는 지침들NDC2017 언리얼엔진4 디버깅 101 - 게임 기획자, 프로그래머가 버그와 만났을 때 사용할 수 있는 지침들
NDC2017 언리얼엔진4 디버깅 101 - 게임 기획자, 프로그래머가 버그와 만났을 때 사용할 수 있는 지침들
 
Mixed reality
Mixed realityMixed reality
Mixed reality
 
C#을 사용한 빠른 툴 개발
C#을 사용한 빠른 툴 개발C#을 사용한 빠른 툴 개발
C#을 사용한 빠른 툴 개발
 

Similar a Introduction to 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
 

Similar a Introduction to 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
 

Más 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
 

Más 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

Platformless Horizons for Digital Adaptability
Platformless Horizons for Digital AdaptabilityPlatformless Horizons for Digital Adaptability
Platformless Horizons for Digital AdaptabilityWSO2
 
MS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectorsMS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectorsNanddeep Nachan
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherRemote DBA Services
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...DianaGray10
 
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...Angeliki Cooney
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FMESafe Software
 
CNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In PakistanCNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In Pakistandanishmna97
 
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...apidays
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businesspanagenda
 
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot ModelMcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot ModelDeepika Singh
 
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...apidays
 
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 AmsterdamDEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 AmsterdamUiPathCommunity
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century educationjfdjdjcjdnsjd
 
DBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDropbox
 
Elevate Developer Efficiency & build GenAI Application with Amazon Q​
Elevate Developer Efficiency & build GenAI Application with Amazon Q​Elevate Developer Efficiency & build GenAI Application with Amazon Q​
Elevate Developer Efficiency & build GenAI Application with Amazon Q​Bhuvaneswari Subramani
 
ICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesrafiqahmad00786416
 
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Jeffrey Haguewood
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native ApplicationsWSO2
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobeapidays
 

Último (20)

Platformless Horizons for Digital Adaptability
Platformless Horizons for Digital AdaptabilityPlatformless Horizons for Digital Adaptability
Platformless Horizons for Digital Adaptability
 
MS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectorsMS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectors
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
 
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
CNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In PakistanCNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In Pakistan
 
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
 
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot ModelMcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
 
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
 
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 AmsterdamDEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
Understanding the FAA Part 107 License ..
Understanding the FAA Part 107 License ..Understanding the FAA Part 107 License ..
Understanding the FAA Part 107 License ..
 
DBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor Presentation
 
Elevate Developer Efficiency & build GenAI Application with Amazon Q​
Elevate Developer Efficiency & build GenAI Application with Amazon Q​Elevate Developer Efficiency & build GenAI Application with Amazon Q​
Elevate Developer Efficiency & build GenAI Application with Amazon Q​
 
ICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesICT role in 21st century education and its challenges
ICT role in 21st century education and its challenges
 
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
 

Introduction to 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