AR.js-矩形标记跟踪

时间:2019-05-06 03:00:39

标签: javascript matrix three.js ar.js

  

.makeShear(x:Float,y:Float,z:Float):这个   x-X轴上的剪切量。   y-Y轴上的剪切量。   z-Z轴上的剪切量。

     

将此矩阵设置为剪切变换:   1,y,z,0,   x,1,z,0,   x,y,1,0,   0、0、0、1   https://threejs.org/docs/#api/en/math/Matrix4

我认为.makeShear可能是解决方案。

------添加----- / /

/

/

有没有人有在AR.js中跟踪矩形标记的经验? 随着我的进步,我在这里头脑风暴。 如果有人能够加入,我很想听听您的想法。

我设法使AR.js跟踪矩形标记,这很好,但是可以理解,因为该标记告诉相机采用的角度和角度,我的three.js场景发生了扭曲/倾斜 enter image description here

有没有一种方法可以编辑相机参数来抵消更改后的视角? 例如,我一直在研究'../ build / ar.js'

//

ARjs.MarkerControls.prototype.updateWithModelViewMatrix = function(modelViewMatrix){
    var markerObject3D = this.object3d;

    // mark object as visible
    markerObject3D.visible = true

    if( this.context.parameters.trackingBackend === 'artoolkit' ){
        // apply context._axisTransformMatrix - change artoolkit axis to match usual webgl one
        var tmpMatrix = new THREE.Matrix4().copy(this.context._artoolkitProjectionAxisTransformMatrix)
        tmpMatrix.multiply(modelViewMatrix)

        modelViewMatrix.copy(tmpMatrix)

    }else if( this.context.parameters.trackingBackend === 'aruco' ){
        // ...
    }else if( this.context.parameters.trackingBackend === 'tango' ){
        // ...
    }else console.assert(false)

    console.log('markerObject3D ',markerObject3D.matrix);
    console.log('modelViewMatrix',modelViewMatrix);

    if( this.context.parameters.trackingBackend !== 'tango' ){

        // change axis orientation on marker - artoolkit say Z is normal to the marker - ar.js say Y is normal to the marker
        var markerAxisTransformMatrix = new THREE.Matrix4().makeRotationX(Math.PI/2)
        modelViewMatrix.multiply(markerAxisTransformMatrix)
    }

    // change markerObject3D.matrix based on parameters.changeMatrixMode
    if( this.parameters.changeMatrixMode === 'modelViewMatrix' ){
        markerObject3D.matrix.copy(modelViewMatrix)
    }else if( this.parameters.changeMatrixMode === 'cameraTransformMatrix' ){
        markerObject3D.matrix.getInverse( modelViewMatrix )
    }else {
        console.assert(false)
    }

    // decompose - the matrix into .position, .quaternion, .scale
    markerObject3D.matrix.decompose(markerObject3D.position, markerObject3D.quaternion, markerObject3D.scale)

    // dispatchEvent
    this.dispatchEvent( { type: 'markerFound' } );
}

0 个答案:

没有答案