1

我有一个由很多点组成的场景,我使用这些点绘制

glBegin(GL_POINTS);
glVertex3f(x[i],y[i],z[i]); // the points are displayed properly .. 
glEnd();

我希望做的是能够使用鼠标单击场景中的一个点并获得其 3-D 坐标。

我见过其他要使用的线程:

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, modelview, projection, viewport, out posX, out posY, out posZ);

但我总是得到z=0输出。这是因为这些是点而不是多边形吗?有没有办法获得 z 的坐标?

4

2 回答 2

0

不幸的是,它无法完成。屏幕上的任何点 x,y 点都可以指沿场景中给定光线的任何点。

鉴于您正在绘制点,您可能希望使用选择模式来选择特定点,然后确定该点的坐标。

于 2011-03-03T19:13:45.803 回答
0

我认为您以错误的方式调用 glReadPixels 。x, y, width 和 height 必须是 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 ( rect.Width * mouse_x, rect.Height() * (1.0 - mouse_y) 时正确缩放它们如果你得到这个对,imo您的代码应该按预期工作。

于 2011-08-21T12:46:10.980 回答