Конвертировать 2D точки с вращением в равносторонние координаты проекции - PullRequest
0 голосов
/ 03 октября 2018

Я создал простой куб и текстурировал его с помощью кубической карты, извлеченной из панорамного изображения.В этом кубе я делаю повороты вокруг его источника и создаю изображения, используя 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*q2
res1 = q3.rotate(np.array([x1, y1, 1]))

Я не вращаюсь вокругZ-ось.Кстати, я попытался переключить q1 и q2, а также попытался использовать euler из библиотеки transforms3d, который дал мне те же значения.

Я думаю, что z, установленный в 1, может быть проблемой здесь, но я не уверен.

Есть идеи?

1 Ответ

0 голосов
/ 05 октября 2018

Решил проблему.

Передал координаты 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 |))

...