使用three.js从3D位置的2D屏幕位置

时间:2014-07-14 13:49:50

标签: javascript three.js

我在旋转的父对象中有一些3D对象。

我正在添加一组2D“热点”,它们遵循这些对象的屏幕位置。我得到了这个来成功地将子对象的位置转换为2D:

        // HOTSPOTS //
        var v1,m1,p,hotspotX,hotspotY;

        v1 = new THREE.Vector3();
        m1 = new THREE.Matrix4();


        m1 = childObject.matrixWorld;
        v1.setFromMatrixPosition(m1);
        p = projector.projectVector(v1, camera1);

        hotspotX = (p.x + 1) / 2;
        hotspotY = (-p.y + 1) / 2;

问题是,我不想将子对象的原点用作热点位置,而是将其设置为相对于它,即热点的y可能是childObject.y-10。我认为这需要在转换为矩阵之前发生。有没有办法像matrixWorld一样,但是从向量而不是对象?

我可以为每个热点创建额外的空对象,并将它们的位置设置在我想要的位置,但是看到childObjects已经存在,我宁愿使用它们,如果可以的话。我之前发现的所有示例都使用了现已弃用的函数。希望这是有道理的,我是矩阵的新手。

谢谢!

0 个答案:

没有答案