SlideShare a Scribd company logo
Créez les interfaces du futur avec les APIs d’aujourd’hui
Je suis web opener chez
Deux interfaces futuristes utilisant des APIs web
+ web sockets + device orientation =




                    + du WebGL!!
server.js
       α, β, ɣ               α, β, ɣ

remote.js                         teapot.js
web sockets
remote.js:
      var websocketServerUrl = 'ws://10.112.0.139:8080/';

      window.addEventListener('DOMContentLoaded', function init() {
        //init websocket connections
        //device orientation sync socket
        var ws = new WebSocket(websocketServerUrl);
        ws.onopen = function() {
          ws.opened = true;
        };

        //listen to device orientation
        window.addEventListener('deviceorientation', function(e) {
          if (ws.opened) {
            ws.send(JSON.stringify({
              alpha: e.alpha,
              beta: e.beta,
              gamma: e.gamma
            }));
          }
        });
      });
server.js:

             // ws server
             var ws = require('websocket-server');
             var wsServer = ws.createServer();

             wsServer.addListener('connection',
             function(connection){
               connection.addListener('message',
             function(msg) {
                 wsServer.broadcast(msg);
               });
             });

             wsServer.listen(8080);
teapot.js:

  window.addEventListener('DOMContentLoaded', function init() {
    //connect to server using websockets
    var ws = new WebSocket('ws://10.112.0.139:8080/');
    ws.onopen = function() {
      ws.onmessage = function(e) {
        var data = JSON.parse(e.data),
            avalue = data.alpha / 180 * Math.PI,
            bvalue = data.beta / 180 * Math.PI,
            gvalue = data.gamma / 180 * Math.PI;
          
          teapot.rotation.set(gvalue, avalue, -bvalue);
       };
     };
  });
socket.io
device orientation
remote.js:

      //listen to device orientation
      window.addEventListener('deviceorientation', function(e) {
        angles.innerHTML = 'alpha: ' + e.alpha + ', beta: ' +
    e.beta + ', gamma: ' + e.gamma;
        if (ws.opened) {
          ws.send(JSON.stringify({
            alpha: e.alpha,
            beta: e.beta,
            gamma: e.gamma
          }));
        }
      });
source: http://lists.w3.org/Archives/Public/
public-geolocation/2012Jun/0000.html                  ↑N                  ↑up                  ↑up
All Android-based test results shown below
were obtained from a
HTC One X running Android 4.0. All iOS-
                                               α                      β                  ɣ
based test results were obtained
from an Apple iPad running iOS 5.1.


                                                          270                   0                      0
       Chrome beta for                             360/0___|___180        -90___|___90       -90/270___|___90
          Android                                           |                   |                       |
                                                           90                   0                     180
                                                        360/0                    0                   0
                                                    270___|___90          -90___|___90         -90___|___90
  FF mobile for Android
                                                          |                      |                   |
                                                         180                 -180/180                0
                                                        0/360                    0                   0
      Opera Mobile for                               90___|___270         -90___|___90         -90___|___90
         Android                                          |                      |                   |
                                                         180                 -180/180                0
                                                          90                    0                    0
                                                    180___|___0/360       -90___|___90         -90___|___90
          Safari for iOS
                                                           |                    |                     |
                                                         270                    0                 -180/180
                                                        0/360                    0                   0
           Specification                              90___|___270         -90___|___90         -90___|___90
                                                          |                      |                   |
                                                         180                 -180/180                0
et tout ça n’est que pour un dispositif!
1. shim: gist.github.com/2966043 (crée par richtr)

2. étalonnage fait à travers d’une UI
WebGL
three.js
// scene size
var WIDTH = 724, HEIGHT = 512;

// get the DOM element to attach to
var container = $('container');

// create a WebGL renderer, set its size and append it to the DOM
var renderer = new THREE.WebGLRenderer();

renderer.setSize(WIDTH, HEIGHT);

renderer.setClearColorHex(0x111111, 1);
renderer.clear();

container.appendChild(renderer.domElement);

// create a scene
var scene = new THREE.Scene();
// camera settings: fov, aspect ratio, near, far
var FOV = 45, ASPECT = WIDTH / HEIGHT, NEAR = 0.1, FAR = 10000;

// create a camera and position camera on z axis (starts at 0,0,0)
var camera = new THREE.PerspectiveCamera( FOV, ASPECT, NEAR, FAR);
camera.position.z = 100;

// add the camera to the scene
scene.add(camera);

// create some lights, position them and add it to the scene
var spotlight = new THREE.SpotLight();
spotlight.position.set( 170, 330, -160 );
scene.add(spotlight);

ambilight = new THREE.AmbientLight(0x333333);
scene.add(ambilight);

//enable shadows on the renderer
renderer.shadowMapEnabled = true;
// add an object (teapot) to the scene
var teapot;

var loader = new THREE.JSONLoader(),
  createScene = function createScene( geometry ) {
      var material = new THREE.MeshFaceMaterial();
      teapot = new THREE.Mesh( geometry, material ); 
      teapot.scale.set(8, 8, 8);   
      teapot.position.set( 0, -10, 0 );
      scene.add( teapot );
      
    console.log('matrix ' + teapot.matrix);
    console.log('rotation ' + teapot.rotation.x);
  };

loader.load('teapot-model.js', createScene );

// draw
renderer.render(scene, camera);
animate();

//animate
function animate() {
    requestAnimationFrame(animate);
    renderer.render(scene, camera);
}
canvas 2D?
+ getUserMedia =




           + du WebGL!!
getUserMedia
<video id="camera" autoplay></video>


var video = document.getElementById("camera");

navigator.getUserMedia({ video: true }, function(stream) {
    video.src = window.URL.createObjectURL(stream) || stream;
}, function() {
    //error...
});




                ** vous devez ajouter ces deux lignes pour que vôtre code marche dans tous les navigateurs

                navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia ||
                navigator.mozGetUserMedia || navigator.msGetUserMedia;

                window.URL = window.URL || window.webkitURL || window.mozURL || window.msURL;
headtrackr.js
<canvas id="inputCanvas" width="320" height="240"
style="display:none"></canvas>
<video id="inputVideo" autoplay loop></video>

<script>
  var videoInput = document.getElementById('inputVideo');
  var canvasInput = document.getElementById('inputCanvas');

  var htracker = new headtrackr.Tracker();
  htracker.init(videoInput, canvasInput);
  htracker.start();
</script>
// set up camera controller for head-coupled perspective
headtrackr.controllers.three.realisticAbsoluteCameraControl(
camera, 27, [0,0,50], new THREE.Vector3(0,0,0), {damping : 0.5});

 * @param {THREE.PerspectiveCamera} camera
 * @param {number} scaling size of screen in 3d-model relative to
vertical size of computer screen in real life
 * @param {array} fixedPosition array (x,y,z) w/ the position of
the real life screen in the 3d-model space coordinates
 * @param {THREE.Vector3} lookAt the object/position the camera
should be pointed towards
 * @param {object} params optional object with optional parameters
document.addEventListener('headtrackingEvent', function(event) {
     scene.fog = new THREE.Fog(0x000000,
        1+(event.z*27), 3000+(event.z*27));
}, false);

* x :   position   of head in cm's right of camera as seen from
users   point of   view (see figure)
* y :   position   of head in cm's above camera (see figure)
* z :   position   of head in cm's distance from camera (see figure)
WebGL
three.js
//top wall
plane1 = new THREE.Mesh(new THREE.PlaneGeometry(500, 3000, 5, 15),
   new THREE.MeshBasicMaterial({color: 0xcccccc, wireframe : true }));
plane1.rotation.x = Math.PI/2;
plane1.position.y = 250;
plane1.position.z = 50-1500;
scene.add(plane1);
 var geometry = new THREE.Geometry();
      geometry.vertices.push(
        new THREE.Vertex(new THREE.Vector3(0, 0, -80000)));
      geometry.vertices.push(new THREE.Vertex(
        new THREE.Vector3(0, 0, z)));
      var line = new THREE.Line(geometry,
        new THREE.LineBasicMaterial({color: 0xeeeeee }));
      line.position.x = x;
      line.position.y = y;
      scene.add(line);
github.com/luzc/wiimote



auduno.github.com/
headtrackr/examples/targets.html

github.com/auduno/headtrackr
shinydemos.com/touch-tracker


github.com/operasoftware
@gerbille



github.com/luzc



dev.opera.com

More Related Content

Similar to Des interfaces futuristes utilisant des APIs web

Device dis(orientation)?
Device dis(orientation)?Device dis(orientation)?
Device dis(orientation)?
gerbille
 
How to build a html5 websites.v1
How to build a html5 websites.v1How to build a html5 websites.v1
How to build a html5 websites.v1
Bitla Software
 
20110525[Taipei GTUG] titanium mobile簡介
20110525[Taipei GTUG] titanium mobile簡介20110525[Taipei GTUG] titanium mobile簡介
20110525[Taipei GTUG] titanium mobile簡介
Justin Lee
 
Creating the interfaces of the future with the APIs of today
Creating the interfaces of the future with the APIs of todayCreating the interfaces of the future with the APIs of today
Creating the interfaces of the future with the APIs of today
gerbille
 
Adaptive UI - 解像度の異なるデバイスや画面の向きに対応する 最適なレイアウトへ -
Adaptive UI  - 解像度の異なるデバイスや画面の向きに対応する 最適なレイアウトへ - Adaptive UI  - 解像度の異なるデバイスや画面の向きに対応する 最適なレイアウトへ -
Adaptive UI - 解像度の異なるデバイスや画面の向きに対応する 最適なレイアウトへ -
Yuji Hato
 

Similar to Des interfaces futuristes utilisant des APIs web (20)

Device dis(orientation)?
Device dis(orientation)?Device dis(orientation)?
Device dis(orientation)?
 
How to build a html5 websites.v1
How to build a html5 websites.v1How to build a html5 websites.v1
How to build a html5 websites.v1
 
20110525[Taipei GTUG] titanium mobile簡介
20110525[Taipei GTUG] titanium mobile簡介20110525[Taipei GTUG] titanium mobile簡介
20110525[Taipei GTUG] titanium mobile簡介
 
How to Build SPA with Vue Router 2.0
How to Build SPA with Vue Router 2.0How to Build SPA with Vue Router 2.0
How to Build SPA with Vue Router 2.0
 
Responsive layouts by Maqbool
Responsive layouts by MaqboolResponsive layouts by Maqbool
Responsive layouts by Maqbool
 
2011 05-23 metrics-agilasverige-english
2011 05-23 metrics-agilasverige-english2011 05-23 metrics-agilasverige-english
2011 05-23 metrics-agilasverige-english
 
Android RotateAnimation 簡介
Android RotateAnimation 簡介Android RotateAnimation 簡介
Android RotateAnimation 簡介
 
Creating the interfaces of the future with the APIs of today
Creating the interfaces of the future with the APIs of todayCreating the interfaces of the future with the APIs of today
Creating the interfaces of the future with the APIs of today
 
DevConfZA 2020 : Automating your cloud: What are the building blocks
DevConfZA 2020 : Automating your cloud: What are the building blocksDevConfZA 2020 : Automating your cloud: What are the building blocks
DevConfZA 2020 : Automating your cloud: What are the building blocks
 
Crush Candy with DukeScript
Crush Candy with DukeScriptCrush Candy with DukeScript
Crush Candy with DukeScript
 
Svcc 2013-d3
Svcc 2013-d3Svcc 2013-d3
Svcc 2013-d3
 
SVCC 2013 D3.js Presentation (10/05/2013)
SVCC 2013 D3.js Presentation (10/05/2013)SVCC 2013 D3.js Presentation (10/05/2013)
SVCC 2013 D3.js Presentation (10/05/2013)
 
Building Isomorphic Apps (JSConf.Asia 2014)
Building Isomorphic Apps (JSConf.Asia 2014)Building Isomorphic Apps (JSConf.Asia 2014)
Building Isomorphic Apps (JSConf.Asia 2014)
 
Svg, canvas e animations in angular (3 maggio 2019)
Svg, canvas e animations in angular (3 maggio 2019)Svg, canvas e animations in angular (3 maggio 2019)
Svg, canvas e animations in angular (3 maggio 2019)
 
Micro app-framework
Micro app-frameworkMicro app-framework
Micro app-framework
 
Micro app-framework - NodeLive Boston
Micro app-framework - NodeLive BostonMicro app-framework - NodeLive Boston
Micro app-framework - NodeLive Boston
 
RESS – Responsive Webdesign and Server Side Components
RESS – Responsive Webdesign and Server Side ComponentsRESS – Responsive Webdesign and Server Side Components
RESS – Responsive Webdesign and Server Side Components
 
Front End Development for Back End Java Developers - Jfokus 2020
Front End Development for Back End Java Developers - Jfokus 2020Front End Development for Back End Java Developers - Jfokus 2020
Front End Development for Back End Java Developers - Jfokus 2020
 
Adaptive UI - 解像度の異なるデバイスや画面の向きに対応する 最適なレイアウトへ -
Adaptive UI  - 解像度の異なるデバイスや画面の向きに対応する 最適なレイアウトへ - Adaptive UI  - 解像度の異なるデバイスや画面の向きに対応する 最適なレイアウトへ -
Adaptive UI - 解像度の異なるデバイスや画面の向きに対応する 最適なレイアウトへ -
 
Beauty Treatment for your Android Application
Beauty Treatment for your Android ApplicationBeauty Treatment for your Android Application
Beauty Treatment for your Android Application
 

Recently uploaded

Essentials of Automations: Optimizing FME Workflows with Parameters
Essentials of Automations: Optimizing FME Workflows with ParametersEssentials of Automations: Optimizing FME Workflows with Parameters
Essentials of Automations: Optimizing FME Workflows with Parameters
Safe Software
 
Search and Society: Reimagining Information Access for Radical Futures
Search and Society: Reimagining Information Access for Radical FuturesSearch and Society: Reimagining Information Access for Radical Futures
Search and Society: Reimagining Information Access for Radical Futures
Bhaskar Mitra
 
Future Visions: Predictions to Guide and Time Tech Innovation, Peter Udo Diehl
Future Visions: Predictions to Guide and Time Tech Innovation, Peter Udo DiehlFuture Visions: Predictions to Guide and Time Tech Innovation, Peter Udo Diehl
Future Visions: Predictions to Guide and Time Tech Innovation, Peter Udo Diehl
Peter Udo Diehl
 

Recently uploaded (20)

UiPath Test Automation using UiPath Test Suite series, part 1
UiPath Test Automation using UiPath Test Suite series, part 1UiPath Test Automation using UiPath Test Suite series, part 1
UiPath Test Automation using UiPath Test Suite series, part 1
 
Bits & Pixels using AI for Good.........
Bits & Pixels using AI for Good.........Bits & Pixels using AI for Good.........
Bits & Pixels using AI for Good.........
 
Essentials of Automations: Optimizing FME Workflows with Parameters
Essentials of Automations: Optimizing FME Workflows with ParametersEssentials of Automations: Optimizing FME Workflows with Parameters
Essentials of Automations: Optimizing FME Workflows with Parameters
 
From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...
From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...
From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...
 
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
 
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
 
In-Depth Performance Testing Guide for IT Professionals
In-Depth Performance Testing Guide for IT ProfessionalsIn-Depth Performance Testing Guide for IT Professionals
In-Depth Performance Testing Guide for IT Professionals
 
The Future of Platform Engineering
The Future of Platform EngineeringThe Future of Platform Engineering
The Future of Platform Engineering
 
НАДІЯ ФЕДЮШКО БАЦ «Професійне зростання QA спеціаліста»
НАДІЯ ФЕДЮШКО БАЦ  «Професійне зростання QA спеціаліста»НАДІЯ ФЕДЮШКО БАЦ  «Професійне зростання QA спеціаліста»
НАДІЯ ФЕДЮШКО БАЦ «Професійне зростання QA спеціаліста»
 
UiPath Test Automation using UiPath Test Suite series, part 2
UiPath Test Automation using UiPath Test Suite series, part 2UiPath Test Automation using UiPath Test Suite series, part 2
UiPath Test Automation using UiPath Test Suite series, part 2
 
Demystifying gRPC in .Net by John Staveley
Demystifying gRPC in .Net by John StaveleyDemystifying gRPC in .Net by John Staveley
Demystifying gRPC in .Net by John Staveley
 
Search and Society: Reimagining Information Access for Radical Futures
Search and Society: Reimagining Information Access for Radical FuturesSearch and Society: Reimagining Information Access for Radical Futures
Search and Society: Reimagining Information Access for Radical Futures
 
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdf
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdfSmart TV Buyer Insights Survey 2024 by 91mobiles.pdf
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdf
 
Future Visions: Predictions to Guide and Time Tech Innovation, Peter Udo Diehl
Future Visions: Predictions to Guide and Time Tech Innovation, Peter Udo DiehlFuture Visions: Predictions to Guide and Time Tech Innovation, Peter Udo Diehl
Future Visions: Predictions to Guide and Time Tech Innovation, Peter Udo Diehl
 
Assuring Contact Center Experiences for Your Customers With ThousandEyes
Assuring Contact Center Experiences for Your Customers With ThousandEyesAssuring Contact Center Experiences for Your Customers With ThousandEyes
Assuring Contact Center Experiences for Your Customers With ThousandEyes
 
Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...
Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...
Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...
 
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...
 
Exploring UiPath Orchestrator API: updates and limits in 2024 🚀
Exploring UiPath Orchestrator API: updates and limits in 2024 🚀Exploring UiPath Orchestrator API: updates and limits in 2024 🚀
Exploring UiPath Orchestrator API: updates and limits in 2024 🚀
 
IoT Analytics Company Presentation May 2024
IoT Analytics Company Presentation May 2024IoT Analytics Company Presentation May 2024
IoT Analytics Company Presentation May 2024
 
"Impact of front-end architecture on development cost", Viktor Turskyi
"Impact of front-end architecture on development cost", Viktor Turskyi"Impact of front-end architecture on development cost", Viktor Turskyi
"Impact of front-end architecture on development cost", Viktor Turskyi
 

Des interfaces futuristes utilisant des APIs web

  • 1. Créez les interfaces du futur avec les APIs d’aujourd’hui
  • 2. Je suis web opener chez
  • 3. Deux interfaces futuristes utilisant des APIs web
  • 4. + web sockets + device orientation = + du WebGL!!
  • 5. server.js α, β, ɣ α, β, ɣ remote.js teapot.js
  • 7. remote.js: var websocketServerUrl = 'ws://10.112.0.139:8080/'; window.addEventListener('DOMContentLoaded', function init() {   //init websocket connections   //device orientation sync socket   var ws = new WebSocket(websocketServerUrl);   ws.onopen = function() {     ws.opened = true;   };   //listen to device orientation   window.addEventListener('deviceorientation', function(e) {     if (ws.opened) {       ws.send(JSON.stringify({         alpha: e.alpha,         beta: e.beta,         gamma: e.gamma       }));     }   }); });
  • 8. server.js: // ws server var ws = require('websocket-server'); var wsServer = ws.createServer(); wsServer.addListener('connection', function(connection){   connection.addListener('message', function(msg) {     wsServer.broadcast(msg);   }); }); wsServer.listen(8080);
  • 9. teapot.js: window.addEventListener('DOMContentLoaded', function init() {   //connect to server using websockets   var ws = new WebSocket('ws://10.112.0.139:8080/');   ws.onopen = function() {     ws.onmessage = function(e) {       var data = JSON.parse(e.data),           avalue = data.alpha / 180 * Math.PI,           bvalue = data.beta / 180 * Math.PI,           gvalue = data.gamma / 180 * Math.PI;                  teapot.rotation.set(gvalue, avalue, -bvalue);      };    }; });
  • 10.
  • 13. remote.js:   //listen to device orientation   window.addEventListener('deviceorientation', function(e) {     angles.innerHTML = 'alpha: ' + e.alpha + ', beta: ' + e.beta + ', gamma: ' + e.gamma;     if (ws.opened) {       ws.send(JSON.stringify({         alpha: e.alpha,         beta: e.beta,         gamma: e.gamma       }));     }   });
  • 14.
  • 15. source: http://lists.w3.org/Archives/Public/ public-geolocation/2012Jun/0000.html ↑N ↑up ↑up All Android-based test results shown below were obtained from a HTC One X running Android 4.0. All iOS- α β ɣ based test results were obtained from an Apple iPad running iOS 5.1. 270 0 0 Chrome beta for 360/0___|___180 -90___|___90 -90/270___|___90 Android | | | 90 0 180 360/0 0 0 270___|___90 -90___|___90 -90___|___90 FF mobile for Android | | | 180 -180/180 0 0/360 0 0 Opera Mobile for 90___|___270 -90___|___90 -90___|___90 Android | | | 180 -180/180 0 90 0 0 180___|___0/360 -90___|___90 -90___|___90 Safari for iOS | | | 270 0 -180/180 0/360 0 0 Specification 90___|___270 -90___|___90 -90___|___90 | | | 180 -180/180 0
  • 16. et tout ça n’est que pour un dispositif!
  • 17. 1. shim: gist.github.com/2966043 (crée par richtr) 2. étalonnage fait à travers d’une UI
  • 18. WebGL
  • 20.
  • 21. // scene size var WIDTH = 724, HEIGHT = 512; // get the DOM element to attach to var container = $('container'); // create a WebGL renderer, set its size and append it to the DOM var renderer = new THREE.WebGLRenderer(); renderer.setSize(WIDTH, HEIGHT); renderer.setClearColorHex(0x111111, 1); renderer.clear(); container.appendChild(renderer.domElement); // create a scene var scene = new THREE.Scene();
  • 22. // camera settings: fov, aspect ratio, near, far var FOV = 45, ASPECT = WIDTH / HEIGHT, NEAR = 0.1, FAR = 10000; // create a camera and position camera on z axis (starts at 0,0,0) var camera = new THREE.PerspectiveCamera( FOV, ASPECT, NEAR, FAR); camera.position.z = 100; // add the camera to the scene scene.add(camera); // create some lights, position them and add it to the scene var spotlight = new THREE.SpotLight(); spotlight.position.set( 170, 330, -160 ); scene.add(spotlight); ambilight = new THREE.AmbientLight(0x333333); scene.add(ambilight); //enable shadows on the renderer renderer.shadowMapEnabled = true;
  • 23. // add an object (teapot) to the scene var teapot; var loader = new THREE.JSONLoader(),   createScene = function createScene( geometry ) {       var material = new THREE.MeshFaceMaterial();       teapot = new THREE.Mesh( geometry, material );        teapot.scale.set(8, 8, 8);          teapot.position.set( 0, -10, 0 );       scene.add( teapot );            console.log('matrix ' + teapot.matrix);     console.log('rotation ' + teapot.rotation.x);   }; loader.load('teapot-model.js', createScene ); // draw renderer.render(scene, camera); animate(); //animate function animate() {     requestAnimationFrame(animate);     renderer.render(scene, camera); }
  • 24.
  • 26. + getUserMedia = + du WebGL!!
  • 28. <video id="camera" autoplay></video> var video = document.getElementById("camera"); navigator.getUserMedia({ video: true }, function(stream) {     video.src = window.URL.createObjectURL(stream) || stream; }, function() {     //error... }); ** vous devez ajouter ces deux lignes pour que vôtre code marche dans tous les navigateurs navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia || navigator.msGetUserMedia; window.URL = window.URL || window.webkitURL || window.mozURL || window.msURL;
  • 29.
  • 31. <canvas id="inputCanvas" width="320" height="240" style="display:none"></canvas> <video id="inputVideo" autoplay loop></video> <script>   var videoInput = document.getElementById('inputVideo');   var canvasInput = document.getElementById('inputCanvas');   var htracker = new headtrackr.Tracker();   htracker.init(videoInput, canvasInput);   htracker.start(); </script>
  • 32. // set up camera controller for head-coupled perspective headtrackr.controllers.three.realisticAbsoluteCameraControl( camera, 27, [0,0,50], new THREE.Vector3(0,0,0), {damping : 0.5}); * @param {THREE.PerspectiveCamera} camera * @param {number} scaling size of screen in 3d-model relative to vertical size of computer screen in real life * @param {array} fixedPosition array (x,y,z) w/ the position of the real life screen in the 3d-model space coordinates * @param {THREE.Vector3} lookAt the object/position the camera should be pointed towards * @param {object} params optional object with optional parameters
  • 33. document.addEventListener('headtrackingEvent', function(event) { scene.fog = new THREE.Fog(0x000000, 1+(event.z*27), 3000+(event.z*27)); }, false); * x : position of head in cm's right of camera as seen from users point of view (see figure) * y : position of head in cm's above camera (see figure) * z : position of head in cm's distance from camera (see figure)
  • 34. WebGL
  • 36. //top wall plane1 = new THREE.Mesh(new THREE.PlaneGeometry(500, 3000, 5, 15), new THREE.MeshBasicMaterial({color: 0xcccccc, wireframe : true })); plane1.rotation.x = Math.PI/2; plane1.position.y = 250; plane1.position.z = 50-1500; scene.add(plane1);
  • 37.  var geometry = new THREE.Geometry();     geometry.vertices.push( new THREE.Vertex(new THREE.Vector3(0, 0, -80000)));     geometry.vertices.push(new THREE.Vertex( new THREE.Vector3(0, 0, z)));     var line = new THREE.Line(geometry, new THREE.LineBasicMaterial({color: 0xeeeeee }));     line.position.x = x;     line.position.y = y;     scene.add(line);
  • 38.

Editor's Notes

  1. \n
  2. \n
  3. \n
  4. \n
  5. \n
  6. \n
  7. \n
  8. \n
  9. \n
  10. \n
  11. \n
  12. \n
  13. \n
  14. \n
  15. \n
  16. \n
  17. \n
  18. \n
  19. \n
  20. \n
  21. \n
  22. \n
  23. \n
  24. \n
  25. \n
  26. \n
  27. \n
  28. \n
  29. \n
  30. \n
  31. \n
  32. \n
  33. \n
  34. \n
  35. \n
  36. \n
  37. \n
  38. \n
  39. \n
  40. \n
  41. \n