7 votes

Cadre A, AR.JS. Comment positionner l'objet dans le NFT-Marker ?

J'ai un problème de positionnement de l'élément vidéo à l'intérieur de la zone du marqueur NFT. J'ai consulté la documentation AR.JS et AFRAME sans succès.

Le problème : sur chaque appareil avec une résolution d'écran et une résolution de caméra différentes, la vidéo se positionne différemment. Si je règle les paramètres sourceWidth, sourceHeight, displayWidth, displayHeight en fonction de la webcam de mon PC, je ne peux plus voir l'objet sur mon smartphone, car il est rendu hors écran.

Le deuxième problème est de faire en sorte que l'élément vidéo ait exactement la même taille que le marqueur. La taille de la vidéo varie selon les appareils et les caméras.

Voir la capture d'écran

Mon code est presque similaire aux exemples nft dans le dépôt ar.js.

<script src="https://cdn.jsdelivr.net/gh/aframevr/aframe@c5eabc1ac708a76a0dbe9538c40ecd290af65714/dist/aframe-master.js"></script>
<script src="https://raw.githack.com/AR-js-org/AR.js/master/aframe/build/aframe-ar-nft.js"></script>

<script>
    window.onload = function() {
        AFRAME.registerComponent('videohandler', {
            init: function () {
                var marker = this.el;

                this.vid = document.querySelector("#vid");

                marker.addEventListener('markerFound', function () {
                    this.vid.play();
                }.bind(this));

        marker.addEventListener('markerLost', function() {
            this.vid.pause();
            this.vid.currentTime = 0;
        }.bind(this));
            }
        });
    };
</script>

<body style="margin: 0px; overflow: hidden">

    <a-scene vr-mode-ui="enabled: false;" renderer="logarithmicDepthBuffer: false; " embedded arjs="trackingMethod: best; sourceType: webcam; debugUIEnabled: false; sourceWidth:414; sourceHeight:736; displayWidth: 414; displayHeight: 736;">
      <a-assets>
        <video src="https://cors-anywhere.herokuapp.com/https://www.w3schools.com/html/mov_bbb.mp4" preload="auto" id="vid" response-type="arraybuffer" loop
          crossorigin webkit-playsinline autoplay muted playsinline preload="true"></video>
      </a-assets>

      <a-nft type="nft" videohandler url="https://arjs-cors-proxy.herokuapp.com/https://raw.githack.com/AR-js-org/AR.js/master/data/dataNFT/pinball" smooth="true" smoothCount="10" smoothTolerance="0.01" smoothThreshold="5" preload="true">
        <a-video src="#vid" position="0 0 0" width="300" height="424" rotation="-90 0 0" videoelement>
        </a-video>
      </a-nft>

      <a-entity camera></a-entity>
    </a-scene>
</body>

Exemple concret dans le dépôt : https://ar-js-org.github.io/AR.js/aframe/examples/image-tracking/nft-video/ Numérisez cette image : https://raw.githubusercontent.com/AR-js-org/AR.js/master/aframe/examples/image-tracking/nft-video/pinball.jpg

Existe-t-il un moyen, par exemple, d'obtenir la taille et la position du marqueur et de définir la taille et la position exactes de l'élément vidéo ?

Toute aide est appréciée !

0voto

Warren R. Points 1

J'ai récemment rencontré ce problème en utilisant NFT et j'ai découvert que les axes de position x, y, z ne s'ajustent pas vraiment (ou sont déréglés) tant que vous ne modifiez pas plusieurs axes à la fois.

Je ne sais pas si cela peut vous aider, mais cela a fonctionné pour moi, car modifier un axe à la fois et vérifier la position était un véritable casse-tête. De plus, faites des ajustements drastiques de +/- 300 afin de savoir quel angle est ajusté, car je suis presque sûr que mes axes étaient déréglés. Je ne sais pas si l'orientation voulait que l'objet suivi soit sur une surface plutôt que dans ma main, mais cela a rendu le test difficile.

De plus, l'utilisation d'un iphone dans Safari a bien fonctionné, mais un Android dans Chrome a eu des problèmes de suivi et de positionnement.

J'ai utilisé l'iphone sur Safari pour définir le suivi et la position, puis j'ai vérifié avec un autre appareil.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X