Nieco skomplikowane, więc urodziła się ze mną:Three.js: Ray skrzyżowanie przy stosowaniu morphtargets nie działa
Ray przecinają działa idealnie, gdy obiekt nie ma morphTargets.
Gdy obiekt ma morphTargets tylko oryginalna pozycja może zostać przecięte, to znaczy, jeśli morph model z
0,0,0
do50,50,50
promień nie przecinają się z obiektem w 50,50,50, zamiast tego, kiedy I mouse over0,0,0
Dostaję skrzyżowanie (mimo że obiekt już tam nie jest !?).
Czy jest jakaś flaga, którą muszę włączyć, aby sprawić, że Three.js wie, że te wersety zostały przesunięte?
Edytuj, dodano kod.
To sprawia, że moje oczka i dodaje go do tablicy obiektów (które ray przecinają zastosowań):
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);
}
Ray skrzyżowanie dzieje się na mousedown (jest mouseOver jak dobrze, to samo), jak powiedziałem, Kod działa poprawnie, to tylko przecinających z oryginalnym unmorphed oczek:
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';
}
}
zdecydowałem problem musi być związane z faktem, że pozycja jelenia (jak w siatce transform) nigdy się nie zmienia, jednakże wierzchołki odsuwają się, a gdy promień przecina się, to com parowanie pozycji obiektów być może problem jest tutaj?
dostarczenie kodu masz napisane proszę kod – Ocelot
dodaje :) dzięki. – Ian