使用morphtargets无法工作时的光线交叉

6 three.js

有点复杂,所以忍受我:

  • 当对象没有morphTargets时,Ray intersect完美地工作.

  • 当一个对象具有morphTargets只有原来的位置可以相交,也就是说,如果我变身的模型,从0,0,050,50,50光线与物体在50,50,50不会相交,而是当我鼠标放在0,0,0我得到一个路口(即使对象不再存在!?).

是否有某种标志我需要打开以使three.js意识到顶点已移动?

编辑,添加代码.

这使我的网格并将其添加到对象数组(光线交叉使用):

function createDeer( deerGeometry, materials ) {
    mesh = new THREE.MorphAnimMesh( deerGeometry, new THREE.MeshLambertMaterial( { color: 0xE8E8E8, ambient: 0xE8E8E8, morphTargets: true, vertexColors: THREE.FaceColors } ) );
    mesh.scale.set( 3, 3, 3 );
    mesh.position.set( 0, -3, 0 );
    mesh.rotation.set( 0, 0, 0 );
    mesh.castShadow = true;
    mesh.receiveShadow  = true;
    mesh.geometry.dynamic = true;
    scene.add( mesh );
    objects.push( mesh );
}
Run Code Online (Sandbox Code Playgroud)

在mouseDown上发生了Ray交叉(也有一个mouseOver,同样的事情),就像我说的那样,代码工作得很好,它只是与原始的unmorphed网格交叉:

function onDocumentMouseDown( event ) {

    event.preventDefault();

    var vector = new THREE.Vector3( mouse.x, mouse.y, 0.5 );
    projector.unprojectVector( vector, camera );

    var ray = new THREE.Ray( camera.position, vector.subSelf( camera.position ).normalize() );

    var intersects = ray.intersectObjects( objects );

    if ( intersects.length > 0 ) {

        SELECTED = intersects[ 0 ].object;

        for(var i=0; i<objects.length; i++)
            { 
                if(SELECTED.position.x == objects[0].position.x) {
                    thisObject = i; 
                    }
                }

            }

        var intersects = ray.intersectObject( plane );

        container.style.cursor = 'pointer';
    }

}
Run Code Online (Sandbox Code Playgroud)

我已经确定问题必须与鹿的位置(如在网格变换中)永远不会改变这一事实有关,但是顶点确实会移开,并且当光线相交时比较对象位置可能问题就在这里?

Tom*_*cik 0

动画MorphTarget完全发生在GPU(在着色器代码中),而光线相交始终在 上计算CPU。所以事实上,没有简单的方法可以实现您在这里所描述的目标。