Three.js CSS3是否忽略projectonMatrix属性?

Three.js CSS3是否忽略projectonMatrix属性?,three.js,Three.js,我正在用Three.js做增强现实,最近我尝试结合WebGL和CSS3渲染来同时渲染3D内容和DOM对象(主要用于视频播放)。我已经开始学习教程,但我无法使用CSS获得正确的可视化效果(尽管WebGL工作正常) 基本上,在执行AR时,我们必须将两个矩阵应用于场景:投影矩阵和摄影机矩阵。投影矩阵(主行)通常如下所示: var projectionMatrix = [ 1.820090055466, 0, -0.000550820783, 0,

我正在用Three.js做增强现实,最近我尝试结合WebGL和CSS3渲染来同时渲染3D内容和DOM对象(主要用于视频播放)。我已经开始学习教程,但我无法使用CSS获得正确的可视化效果(尽管WebGL工作正常)

基本上,在执行AR时,我们必须将两个矩阵应用于场景:投影矩阵摄影机矩阵。投影矩阵(主行)通常如下所示:

var projectionMatrix = [ 1.820090055466, 0, -0.000550820783, 0,  
                         0, 3.227676868439, -0.036605358124, 0,  
                         0, 0, -1.000199913979,-0.200020000339,  
                         0, 0, -1, 0 
];
相机矩阵(row MARGER)表示表示虚拟世界中相机变换的刚性3D变换(R | t合成):

var cameraMatrix = [ 0.790828585625,0.296402275562,-0.535477280617,-0.309822082520,  
                    -0.612037420273,0.382129371166,-0.692378044128,-0.447699964046,  
                    -0.000600785017,0.875284433365,0.483608126640,-0.637073278427,  
                     0.000000000000,0.000000000000,0.000000000000,1.000000000000];
使用WebGL,将这些矩阵应用于管道非常容易:

self.wglCamera.matrixAutoUpdate = false;
self.wglCamera.projectionMatrix.set(
    pm[0], pm[1],   pm[2],  pm[3],
    pm[4], pm[5],   pm[6],  pm[7],
    pm[8], pm[9],   pm[10], pm[11],
    pm[12], pm[13], pm[14], pm[15]);


self.wglCamera.matrix.set(
    cm[0],  cm[1],  cm[2],  cm[3],
    cm[4],  cm[5],  cm[6],  cm[7],
    cm[8],  cm[9],  cm[10], cm[11],
    cm[12], cm[13], cm[14], cm[15]);
当我对CSS3摄影机执行相同操作时,得到的渲染结果()不正确:

有两个问题:

  • 红色纹理(CSS3Object)非均匀缩放(实际上是正方形)
  • 它总是位于屏幕中心,但它应该位于蓝色网格的位置
在分析CSS3Renderer实现后,我发现只有camera FOV属性用于设置透视效果,但在使用CSS3Renderer进行渲染时,projectionMatrix属性被完全忽略。这是有意的吗

// https://github.com/mrdoob/three.js/blob/master/examples/js/renderers/CSS3DRenderer.js#L225
this.render = function ( scene, camera ) {

    var fov = 0.5 / Math.tan( THREE.Math.degToRad( camera.fov * 0.5 ) ) * _height;

    ...

    camera.matrixWorldInverse.getInverse( camera.matrixWorld );

    // Why we don't use camera.projection Matrix here?
    var style = "translate3d(0,0," + fov + "px)" + getCameraCSSMatrix( camera.matrixWorldInverse ) +
        " translate3d(" + _widthHalf + "px," + _heightHalf + "px, 0)";

    ...

};
如果是,我如何才能达到预期的结果

我已经尝试将PM*CM传递给camera matrix,但这两个问题仍然存在。主要是我更担心被忽略的平移,因为旋转看起来不错


如果有任何想法/建议,我将不胜感激!谢谢。

哦!是的,它确实忽略了projectionMatrix。我们应该调查一下。。。