我已经搜索了很多这个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
答案 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
)如果你做对了,你的代码应该按预期工作。