나와 함께 그렇게 벌거 벗은, 약간 복잡한 : 객체가 더 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
을 계산하면서
의 전체 범위를 포함 할 필요가 있다고
가참고 – Ocelot
코드를 추가하시기 바랍니다 :) 감사합니다. – Ian