GL_Points上的gluUnproject或从鼠标坐标中查找深度坐标

时间:2011-03-03 18:50:23

标签: c++ opengl glut

我已经搜索了很多这个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,modelview,projection,viewport,out posX,out posY,out posZ);

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

非常感谢你,如果这是一个真正的noob qn,我很抱歉...

干杯!

的Rahul

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分: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)如果你做对了,你的代码应该按预期工作。