将旋转的2D点转换为等角投影坐标

时间:2018-10-03 15:57:05

标签: python opengl rotation

我创建了一个简单的立方体,并使用从全景图像中提取的立方体贴图对其进行了纹理处理。在这个立方体中,我绕其原点旋转并使用glReadPixels创建图像。 处理完这些图像后,每张图像会得到几个点,因此我想在等角全景图像上计算它们的等效坐标。

我发现了类似的问题here

但是由于旋转,这不能立即使用。 我试图解决这个问题的方法是对每个图像中获得的点应用相同的旋转以获得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*q2
res1 = q3.rotate(np.array([x1, y1, 1]))

我不绕z轴旋转。 顺便说一句,我尝试切换q1和q2,也尝试使用来自transforms3d库的euler,它给了我相同的值。

我认为将z设置为1可能是这里的问题,但我不确定。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

解决了问题。

将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 |)确定立方体面)