2012-12-05 3 views
5

나와 함께 그렇게 벌거 벗은, 약간 복잡한 : 객체가 더 morphTargets이없는 완벽 할 때Three.js를 : 레이 교차로 작동하지 morphtargets를 사용

  • 레이 작품을 교차.

  • 객체는 원래의 위치가 교차 할 수 morphTargets있다

    , 즉 대신, 언제, 내가 0,0,0에서 50,50,50에 모델 모프 경우 광선이 50,50,50에서 개체와 교차하지 않을 것이다,라고하는 것입니다 나는 이상 마우스 0,0,0 나는 교차로를 얻는다 (비록 물건이 더이상 거기에 없다고해도?).

verts가 이동되었음을 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); 
} 

레이 교차로가 (마우스 오버뿐만 아니라 거기에, 같은 것) mouseDown에서 발생의 그러나, 결코 변화하지 나는 사슴의 위치 (메쉬로 변환) 사실과 관련되어야하는 문제를 결정했습니다

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'; 
    } 

} 

: 코드는 그냥 원래 unmorphed 메쉬 교차하는 것, 잘 작동 정점은 멀리 이동하고 광선이 교차 할 때 com 개체 위치를 일치시킬 가능성이 있습니다. 여기에 문제가 있습니까? 광선 교차 항상 CPU을 계산하면서

+0

의 전체 범위를 포함 할 필요가 있다고

참고 – Ocelot

+0

코드를 추가하시기 바랍니다 :) 감사합니다. – Ian

답변

0

MorphTarget 애니메이션 (쉐이더 코드) GPU 전적으로 일어난다. 따라서 실제로 여기에서 설명하는 것을 달성하는 쉬운 방법은 없습니다.

+1

그러면 경계 상자에 대한 레이 캐스팅이 훨씬 쉽습니다 (아직 완벽하지는 않습니다). – vincent

2

pull request을 병합하여 수정했습니다. 그것이 작동하는 개체의 boundingSphere 당신이 작성한 코드를 제공하는 모핑