Les photos sphériques et la VR
Elliott Chiaradia |25-01-2016
Visionner une simple photo ne vous intéresse plus ? Vous avez envie de quelque chose de plus immersif ? Pourquoi ne pas utiliser de la VR avec des photos sphériques ? Vous aurez l’impression d’être littéralement dans la photo !
Tout d’abord, vous devrez prendre une photo sphérique, il existe différents appareils pouvant prendre ce genre de photo, mais n’ayez crainte, vous pourrez tout aussi bien utiliser votre smartphone ! Diverses applications, comme l’appli Google Camera, offrent cette option « photosphere ». Il ne vous reste plus qu’à prendre une jolie photo.
Si vous vous demandez ce que cela peut donner, je vous invite à tester la démo que j'ai concoctée spécialement pour vous.
Pour afficher la photo, nous allons utiliser le framework A-Frame, mais avant de passer au code, vous devez faire quelques petites retouches à votre photo. Premièrement, votre photo doit avoir une longueur qui fait exactement deux fois la hauteur, sinon l’image risque d’être déformée. Deuxièmement, les dimensions de votre photo doivent être une puissance de deux, sans quoi vous allez obliger A-Frame à la redimensionner, ce qui n’a rien de catastrophique en soi, mis à part que vous allez forcer A-Frame à travailler pour rien. Et un dernier conseil, utilisez des outils de compression d’images comme TinyPng, afin d’éviter que le chargement de votre page prenne beaucoup de temps.
Afficher la photo avec A-Frame
Pour afficher la photo, vous devez tout simplement définir l'attribut "src" de la balise "<a-sky>". Au préalable, nous allons bien entendu charger "aframe.min.js" et définir une caméra.
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<script src="https://aframe.io/releases/latest/aframe.min.js"></script>
</head>
<body>
<a-scene>
<a-camera fov="80" position="0 0.6 0" near="0.2" cursor-color="#33CCFF" wasd-controls-enabled="false"></a-camera>
<a-sky id="sky" src="images/panorama3.jpg"></a-sky>
</a-scene>
</body>
</html>
Vous n'avez rien besoin de plus, vous pouvez dorénavant vous "déplacer" dans votre photo comme bon vous semble.
Changer la photo de fond
Si vous voulez offrir la possibilité à l'utilisateur de changer la photo de fond et arriver à un résultat similaire au mien (que vous pouvez visualiser ici), vous allez devoir rajouter un peu de javascript. Voici mon code source, vous pouvez vous en inspirer comme bon vous semble. J'ai placé les miniatures tout en bas, car j'avais quelques bugs visuels au niveau des pieds, donc autant les cacher !
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<script src="https://aframe.io/releases/latest/aframe.min.js"></script>
</head>
<body>
<a-scene>
<a-camera fov="80" position="0 0.6 0" near="0.2" cursor-color="#33CCFF" wasd-controls-enabled="false">
</a-camera>
<a-image class="miniature" id="panorama1" position="0 -3 -0.5" src="images/min1.jpg" rotation="-90 0 0" scale="6 6 6" width="0.2" height="0.1">
</a-image>
<a-image class="miniature" id="panorama2" position="0 -3 0.1" src="images/min2.jpg" rotation="-90 0 0" scale="6 6 6" width="0.2" height="0.1">
</a-image>
<a-image class="miniature" id="panorama3" position="0 -3 0.7" src="images/min3.jpg" rotation="-90 0 0" scale="6 6 6" width="0.2" height="0.1"></a-image>
<a-sky id="sky" src="images/panorama3.jpg"></a-sky>
</a-scene>
</body>
<script type="text/javascript">
var sky = document.getElementById("sky");
var miniatures = document.getElementsByClassName("miniature");
var changeSky = function() {
var picturePath = 'images/'+this.getAttribute('id')+'.jpg';
sky.setAttribute('src', picturePath);
};
for (var i = 0; i < miniatures.length; i++) {
miniatures[i].addEventListener('click', changeSky, false);
}
</script>
</html>