У меня есть строка JSON, из которой я читаю, и в ней есть список координат x и y, которые я использую для позиций некоторой BoxGeometry.
У меня есть настройка raycaster, так что, когда я навожу мышь на сетку с вокселями, он возвращается из положения, в которое попал raycast. Затем он округляет точку совпадения x и z до ближайшего целого числа, получает дополнительные данные из строки JSON для этих x и z и отображает их во всплывающем окне.
Моя проблема в том, что raycast говорит, что попадает в материал, когда он находится над пустыми областями, и не говорит, что он попадает в сетку, когда он находится над некоторыми областями сетки.
Демонстрацию можно посмотреть здесь: https://sleepy-bayou-1572.herokuapp.com/ (загрузка визуализатора может занять около 20 секунд, он имеет стандартное управление мышью).
А вот источник javascript для браузера: https://sleepy-bayou-1572.herokuapp.com/bundle.js (ТРИ материала находятся внизу файла)
В демо вы можете видеть, что всплывающее окно показывается, когда ваша мышь не находится над сеткой, а в некоторых местах оно не отображается, когда она находится.
Мое предположение состоит в том, что raycast не идет в правильном направлении, но я не знаю, как проверить, куда он идет, поскольку я все еще новичок в raycasting.
Обновление №1
Ответ @6502 был частично проблемой, когда я исправил, что начал получать правильные значения.
Теперь у меня есть новая проблема с этим, я только что исправил CSS на странице, чтобы холст для трех был размещен под этим заголовком, я изменил все ссылки на window.innerHeight
на переменную с высотой минус размер панели навигации (52 пикселя), и это снова далеко. Похоже, что-то неправильно регулируется по высоте.
Обновление №2
Можно ли установить соотношение сторон, нормализованные координаты мыши и т. д., чтобы использовать размер renderer.domElement
? Я создаю это в случае, когда размер страницы и макет, вероятно, немного изменятся, поэтому было бы хорошо не устанавливать смещение окна каждый раз вручную.
Это, вероятно, будет встроено в iframe, поэтому это будет важно.