в контексте OpenGL я видел, что возможно преобразовать координаты мыши в трехмерные мировые координаты (например, MFC с OpenGL получить 3D-координату от 2-й координаты мыши). Тем не менее, это не работает, когда у меня просто набор GLPoint
и много пустого пространства: когда я наводю курсор мыши на пустое пространство, 3D-координаты не имеют смысла.
Как я могу получить координаты ближайшей 3D-точки к моей позиции мыши?
Признайте, что «не проецирование» координат 2D-мыши в трехмерный мир требует дополнительной информации. Положение 2D на экране соответствует бесконечному количеству точек вдоль линии от ближней плоскости до дальней плоскости в 3D. Это означает, что для получения 3D-точки необходимо также указать значение глубины.
gluUnProject
Функция является удобным способом сделать это и предоставляет параметр для этого winZ
, 0.0 найдет 3D-точку в ближней плоскости, а 1.0 найдет ее в дальней плоскости.
gluUnProject(winX, winY, winZ, model, proj, view, objX, objY, objZ);
Замечания: Если gluUnProject
недоступно, вы можете легко понять то же самое с помощью матриц. источник здесь
Когда мышь используется для взаимодействия с трехмерными объектами, это значение глубины обычно определяется путем выборки из буфера глубины или пересечения луча с геометрией сцены или примитива (такого как сфера или прямоугольник). Если целью является взаимодействие с точками, вы можете использовать сферу вокруг каждой точки. Если вам просто нужна трехмерная точка «где-то там», вы можете выбрать значение глубины (возможно, 0,0 в ближней плоскости или 0,5 — на полпути между ближней и дальней плоскостями).