SlideShare une entreprise Scribd logo
1  sur  41
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

Contenu connexe

Similaire à 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
 

Similaire à 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 - NodeLive Boston
Micro app-framework - NodeLive BostonMicro app-framework - NodeLive Boston
Micro app-framework - NodeLive Boston
 
Micro app-framework
Micro app-frameworkMicro app-framework
Micro app-framework
 
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
 

Dernier

Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
vu2urc
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
Joaquim Jorge
 

Dernier (20)

2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
 
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
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
Evaluating the top large language models.pdf
Evaluating the top large language models.pdfEvaluating the top large language models.pdf
Evaluating the top large language models.pdf
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
 
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
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 
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
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
 

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.

Notes de l'éditeur

  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