将带旋转的二维点转换为等角投影坐标
Convert 2D points with rotation to equirectangular projection coordinates
我创建了一个简单的立方体,并使用从全景图像中提取的立方体贴图对其进行了纹理处理。在这个立方体中,我围绕它的原点进行旋转并使用 glReadPixels 创建图像。
处理完这些图像后,我会在每张图像上得到几个点,我想计算它们在等距柱状全景图像上的等效坐标。
我发现了一个类似的问题here。
但是由于轮换,这不是开箱即用的。
我试图解决这个问题是对我在每个图像中得到的点应用相同的旋转以获得 x、y、z 并且几乎使用上面 link 中的方法,但是我得到的坐标很远。
OpenGL 中的旋转:
glLoadIdentity()
glRotatef(pitch, 1.0, 0.0, 0.0)
glRotatef(yaw, 0.0, 1.0, 0.0)
下面是一些用于旋转图像中二维点的代码:
q1 = Quaternion(axis=[0, 1, 0], degrees=rotation[0])
q2 = Quaternion(axis=[1, 0, 0], degrees=rotation[1])
q3 = q1*q2
res1 = q3.rotate(np.array([x1, y1, 1]))
我不绕 z 轴旋转。
顺便说一句,我尝试切换 q1 和 q2,我还尝试使用 transforms3d 库中的 euler,它给了我相同的值。
我认为设置为 1 的 z 可能是这里的问题,但我不确定。
有什么想法吗?
问题解决了。
将 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)
其余的是使用我发布的 link 中的方法 "map_cube" 完成的。 (只需要对 u 和 v 进行一些调整,立方体面可以通过 argmax(|x|, |y|, |z|))
我创建了一个简单的立方体,并使用从全景图像中提取的立方体贴图对其进行了纹理处理。在这个立方体中,我围绕它的原点进行旋转并使用 glReadPixels 创建图像。 处理完这些图像后,我会在每张图像上得到几个点,我想计算它们在等距柱状全景图像上的等效坐标。
我发现了一个类似的问题here。
但是由于轮换,这不是开箱即用的。 我试图解决这个问题是对我在每个图像中得到的点应用相同的旋转以获得 x、y、z 并且几乎使用上面 link 中的方法,但是我得到的坐标很远。
OpenGL 中的旋转:
glLoadIdentity()
glRotatef(pitch, 1.0, 0.0, 0.0)
glRotatef(yaw, 0.0, 1.0, 0.0)
下面是一些用于旋转图像中二维点的代码:
q1 = Quaternion(axis=[0, 1, 0], degrees=rotation[0])
q2 = Quaternion(axis=[1, 0, 0], degrees=rotation[1])
q3 = q1*q2
res1 = q3.rotate(np.array([x1, y1, 1]))
我不绕 z 轴旋转。 顺便说一句,我尝试切换 q1 和 q2,我还尝试使用 transforms3d 库中的 euler,它给了我相同的值。
我认为设置为 1 的 z 可能是这里的问题,但我不确定。
有什么想法吗?
问题解决了。
将 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)
其余的是使用我发布的 link 中的方法 "map_cube" 完成的。 (只需要对 u 和 v 进行一些调整,立方体面可以通过 argmax(|x|, |y|, |z|))