Istnieje kilka doskonałych pytań dotyczących stosów (1, 2) dotyczących niepublikowania w pliku Three.js, czyli w jaki sposób konwertować (x, y) współrzędne myszy w przeglądarce na Współrzędne (x, y, z) w przestrzeni roboczej Three.js. Przeważnie idą tego wzoru:Konwersja współrzędnych globalnych na współrzędne ekranu w pliku Three.js przy użyciu rzutni
var elem = renderer.domElement,
boundingRect = elem.getBoundingClientRect(),
x = (event.clientX - boundingRect.left) * (elem.width/boundingRect.width),
y = (event.clientY - boundingRect.top) * (elem.height/boundingRect.height);
var vector = new THREE.Vector3(
(x/WIDTH) * 2 - 1,
- (y/HEIGHT) * 2 + 1,
0.5
);
projector.unprojectVector(vector, camera);
var ray = new THREE.Ray(camera.position, vector.subSelf(camera.position).normalize());
var intersects = ray.intersectObjects(scene.children);
I zostały próbuje zrobić odwrotnie - zamiast iść z „ekranu do świata” przestrzeni, aby przejść od „świata na ekranie” przestrzeń. Jeśli znam pozycję obiektu w Three.js, jak mogę określić jego pozycję na ekranie?
Wydaje się, że nie ma żadnego opublikowanego rozwiązania tego problemu. Another question about this just showed up on Stack, ale autor twierdzi, że rozwiązał problem za pomocą funkcji, która nie działa dla mnie. Ich rozwiązanie nie używa rzutowanego Ray'a i jestem całkiem pewien, że ponieważ 2D do 3D używa unprojectVector(), to rozwiązanie 3D do 2D będzie wymagało projectVector().
Na Githubie otwarto także this issue.
Każda pomoc jest doceniana.
Dziękuję za wzór tłumaczenia "ekran do świata". To był ból przez wiele godzin .. – LePhleg