Как создать всплывающую подсказку при наведении курсора на элементы Three.js (например, сферу).
У меня есть трехмерный график рассеяния, каждый раз, когда я наводю указатель мыши на сферы на графике рассеяния, я хочу, чтобы всплывала всплывающая подсказка.
Как я могу сделать эту подсказку на чистом WebGL?
Как это сделать с DOM?
^ Другая тема - three.js отображается в контексте WebGL элемента холста.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


То, что вы ищете, называется "Raycasting", и вы найдете дополнительную информацию в документации и примеры.
С помощью Raycasting вы получите информацию о том, какой объект в данный момент находится под курсором мыши. Исходя из этого, вы можете заполнить данные во всплывающей подсказке и расположить ее, используя позицию мыши (в качестве альтернативы, используйте что-то как это, чтобы вычислить экранную позицию 3D-объекта и разместить всплывающую подсказку там).
Я начал с ответа Мартина Шухфуса в качестве основы для этого ответа:
То, что вы ищете, называется "Raycasting", и вы найдете дополнительную информацию в документации и примеры.
С помощью Raycasting вы получите информацию о том, какой объект в данный момент находится под курсором мыши. Исходя из этого, вы можете ввести данные во всплывающую подсказку и расположить ее, используя положение мыши.
В качестве альтернативы, используйте что-то как это, чтобы вычислить экранную позицию трехмерного объекта и разместить там всплывающую подсказку DOM в координатах экранного пространства.
Создание всплывающих подсказок с помощью DOM - самый простой способ, но недостатком является то, что вы не получаете преимуществ рендеринга WebGL, если хотите делать такие вещи, как добавление блеска, тени, рельефных карт и т. д. К своим всплывающим подсказкам.
Используйте что-то как это, чтобы вычислить положение трехмерного объекта на экране и разместить там всплывающую подсказку в координатах экранного пространства.
Затем вам нужно выяснить, как ориентировать контент относительно вашей камеры Three.js, чтобы размер и положение элементов находились в пространстве экрана. Для этого см. Эти сообщения на форуме Three.js:
Как только вы выясните, как рисовать в пространстве экрана в Three.js, вы можете использовать методы, упомянутые в предыдущем разделе Making it with DOM, чтобы определить, где в пространстве экрана вы хотите рисовать всплывающие подсказки WebGL.
Чтобы нарисовать всплывающие подсказки WebGL, у вас есть несколько вариантов:
renderOrder объектов, чтобы элементы пользовательского интерфейса всегда отображались поверх них. См. three.js: как управлять порядком рендерингаrenderOrder (или аналогичный, см. Ссылку на предыдущий маркер), чтобы убедиться, что этот четырехугольник отображается сверху. из всего.
Первый из трех вариантов может быть самым быстрым, но самым трудным. Последний из трех вариантов может быть самым простым, но самым медленным (но, возможно, это не имеет значения в вашем случае, в зависимости от того, что вы пытаетесь нарисовать).
Я не перечислил все возможные варианты. Есть и другие способы сделать это! Кто-то не стесняется редактировать это, чтобы добавить больше возможных способов или больше деталей.
Не стесняйтесь задавать и другие вопросы, тогда, возможно, я смогу расширить ответ.
Возможный дубликат Как добавить всплывающую подсказку в div