【发布时间】:2019-08-14 21:22:12
【问题描述】:
我有一个 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,但我认为我不明白如何将它们结合起来,感谢您的帮助。
【问题讨论】:
标签: python opengl pyopengl glreadpixels