我有一个PyOpenGL项目。我渲染了一个体育场和一些pcd云。我想从屏幕上提取一个点。我有X,Y值,我试图用gluUnProject
或glReadPixelsf
来得到X,Y,z中的点
但我得到了奇怪的数字 例如: 我用相机尽可能地放大到0,0,0点,然后用
worldCoordinate1 = gluUnProject(x, realy, 0.0, mvmatrix, projmatrix, vport)
获取:
(-79.71705354658924, 3.024572101740394, -1.8905707759570176)
看起来不错。这是真正的相机位置。 但我的问题是从远处的飞机开始的。你知道吗
worldCoordinate2 = gluUnProject(x, realy, 1.0, mvmatrix, projmatrix, vport)
理想情况下,我想让我的点碰撞任何缓冲区对象绘制。但我越来越
(2098.1759117202328, -121.52711517535181, 77.12367509703613)
我的函数如下所示:
def get_clicked_location(x, y):
vport = glGetIntegerv(GL_VIEWPORT)
mvmatrix = glGetDoublev(GL_MODELVIEW_MATRIX)
projmatrix = glGetDoublev(GL_PROJECTION_MATRIX)
realy = vport[3] - y
worldCoordinate1 = gluUnProject(x, realy, 0.0, mvmatrix, projmatrix, vport)
worldCoordinate2 = gluUnProject(x, realy, 1.0, mvmatrix, projmatrix, vport)
print worldCoordinate1
print worldCoordinate2
data = glReadPixelsf(x, realy, 1, 1, GL_RGB, GL_UNSIGNED_BYTE)
pick = map(ord, data)
print pick
我想要的是得到x,y,z点与屏幕上绘制的缓冲区的碰撞。但我似乎找不到路。我还发现一些人使用glreadpixelsf,但我不知道如何将它们结合起来谢谢你的帮助。你知道吗
可以使用^{} 从默认帧缓冲区的深度缓冲区读取深度。使用
GL_DEPTH_COMPONENT
格式执行此操作:此深度可与^{} 一起使用,以查找片段的世界(或模型)坐标:
另见get 3d point in space using 2d point in image in python opengl
相关问题 更多 >
编程相关推荐