gluUnproject для GL_Points или поиск координат глубины по координатам мыши - PullRequest
0 голосов
/ 03 марта 2011

Я много искал этот qn и получил некоторую информацию. но я надеюсь, что ты поймешь, что я делаю неправильно.

У меня есть сцена, состоящая из множества точек, которые я нарисовал, используя glBegin (GL_POINTS); glVertex3f (x [i], y [i], z [i]) // точки отображаются правильно ..; glEnd ()

Что я хочу сделать, так это уметь щелкать мышью по одной из точек сцены и получать ее трехмерную координату.

Я видел другие темы для использования: glReadPixels ((GLdouble) mouse_x, (GLdouble) (rect.Height () - mouse_y-1), 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, & Z);

и используйте значение z в gluUnProject (mouse_x, mouse_y, 0, вид модели, проекция, область просмотра, out posX, out posY, out posZ);

но я всегда получаю z = 0 в качестве вывода. Это потому, что это точки, а не многоугольник? Есть ли способ получить координаты z?

Большое спасибо, и мне очень жаль, если это настоящий нуб qn ...

Ура!

Рахул

Ответы [ 2 ]

0 голосов
/ 21 августа 2011

Я думаю, что вы вызываете glReadPixels неправильно.x, y, ширина и высота должны быть GLint, а не double.Это не имеет ничего общего с форматом результата, возвращаемого glReadPixels.Таким образом, вы должны передать координаты окна для позиции мыши и размеров окна в glReadPixels (например, glReadPixels (mouse_x, rect.Height() - mouse_y, rect.Width(), rect.Height(), GL_DEPTH_COMPONENT, GLfloat, &z);. Если диапазон значений mouse_x и mouse_y равен [0.0 .. 1.0], вам необходимо правильно масштабировать их при вызове glReadPixels (* 1002)*) Если вы понимаете это правильно, то, по моему мнению, ваш код должен работать как положено.

0 голосов
/ 03 марта 2011

К сожалению, это невозможно сделать. Любая точка x, y на экране может относиться к любой точке вдоль данного луча в сцене.

Учитывая, что вы рисуете точки, вы, вероятно, захотите использовать режим выбора , чтобы выбрать конкретную точку, а затем определить координаты этой точки.

...