为了账号安全,请及时绑定邮箱和手机立即绑定

将带旋转的 2D 点转换为等距柱状投影坐标

将带旋转的 2D 点转换为等距柱状投影坐标

阿波罗的战车 2021-07-03 10:00:05
我创建了一个简单的立方体,并使用从全景图像中提取的立方体贴图对其进行了纹理化。在这个立方体中,我围绕它的原点旋转并使用 glReadPixels 创建图像。处理完这些图像后,我会在每个图像上得到几个点,我想计算它们在等距柱状全景图像上的等效坐标。我在这里找到了一个类似的问题。但由于旋转,这不是开箱即用的。我试图解决这个问题是对我在每个图像中得到的点应用相同的旋转以获得 x、y、z,并且几乎使用上面链接中的方法,但我得到的坐标相距甚远。OpenGL 中的旋转:glLoadIdentity()glRotatef(pitch, 1.0, 0.0, 0.0)glRotatef(yaw, 0.0, 1.0, 0.0)下面是一些用于旋转图像中 2D 点的代码:q1 = Quaternion(axis=[0, 1, 0], degrees=rotation[0])q2 = Quaternion(axis=[1, 0, 0], degrees=rotation[1])q3 = q1*q2res1 = q3.rotate(np.array([x1, y1, 1]))我不绕 z 轴旋转。顺便说一句,我尝试切换 q1 和 q2,我也尝试使用来自 transforms3d 库的 euler,它给了我相同的值。我认为设置为 1 的 z 可能是这里的问题,但我不确定。有任何想法吗?
查看完整描述

1 回答

?
慕娘9325324

TA贡献1783条经验 获得超4个赞

解决了问题。


将 x、y 坐标传递给 OpenGL,并使用 glReadPixels 获得深度,并通过 gluUnProject 获得最终点。


depth = glReadPixels(x1, y1, 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT)

point = gluUnProject(x1, y1, depth, model_view, proj, view)

其余部分是使用我发布的链接中的“map_cube”方法完成的。(只需要对 u 和 v 进行一些调整,立方体面可以由 argmax(|x|, |y|, |z|) 确定)


查看完整回答
反对 回复 2021-07-06
  • 1 回答
  • 0 关注
  • 190 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信