OpenGL получает 3D-координаты ближайшей мировой 3D-точки к текущей позиции мыши

в контексте OpenGL я видел, что возможно преобразовать координаты мыши в трехмерные мировые координаты (например, MFC с OpenGL получить 3D-координату от 2-й координаты мыши). Тем не менее, это не работает, когда у меня просто набор GLPointи много пустого пространства: когда я наводю курсор мыши на пустое пространство, 3D-координаты не имеют смысла.

Как я могу получить координаты ближайшей 3D-точки к моей позиции мыши?

7

Решение

Признайте, что «не проецирование» координат 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 — на полпути между ближней и дальней плоскостями).

3

Другие решения


По вопросам рекламы [email protected]