关于c ++:GL_Points上的gluUnproject或从鼠标坐标中查找深度坐标

gluUnproject on GL_Points or finding the depth coordinates from mouse coordinates

我搜索了很多关于这个问题的信息。但我希望你能指出我做错了什么。

我有一个场景,由很多点组成,我使用glbegin(gl_点);glvertex3f(x[i]、y[i]、z[i])绘制这些点//这些点显示正确。格兰德()

我想做的是能够用鼠标点击场景中的一个点并获得它的三维坐标。

我见过其他线程要使用:glreadPixels((gldouble)mouse_x,(gldouble)(rect.height()-mouse_y-1),1,1,gl_depth_component,gl_float,&z);

并使用z的值glunproject(鼠标x,鼠标y,0,模型视图,投影,视区,输出posx,输出posy,输出posz);

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

非常感谢你,如果这是一个真正的问题,我很抱歉…

干杯!

拉胡尔


我认为你说glreadpixels是错误的。x,y,宽度和高度必须是闪烁的,而不是双倍的。这与glreadpixels返回的结果格式无关。因此,应该将鼠标位置和窗口大小的窗口坐标传递到glreadPixels(例如glReadPixels (mouse_x, rect.Height() - mouse_y, rect.Width(), rect.Height(), GL_DEPTH_COMPONENT, GLfloat, &z);)。如果鼠标x和鼠标y值范围为[0.0..1.0],您需要在调用glreadPixels(rect.Width * mouse_x, rect.Height() * (1.0 - mouse_y时适当地缩放它们。如果您这样做了,imo您的代码应该按预期工作。


不幸的是,这是做不到的。屏幕上的任何点X、Y都可以指场景中给定光线的任何点。

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