Я пытаюсь визуализировать куб поверх маркера обнаружения в openGL.Я делаю это так.
rmtx = cv2.Rodrigues(rvec)[0]
m1 = np.array([[rmtx[0][0],rmtx[0][1],rmtx[0][2],tvec[0][0][0]],
[rmtx[1][0],rmtx[1][1],rmtx[1][2],tvec[0][0][1]],
[rmtx[2][0],rmtx[2][1],rmtx[2][2],tvec[0][0][2]],
[0.0 ,0.0 ,0.0 ,1.0 ]])
Inverse_mat = np.array([[ 1.0, 1.0, 1.0, 1.0],
[-1.0,-1.0,-1.0,-1.0],
[-1.0,-1.0,-1.0,-1.0],
[ 1.0, 1.0, 1.0, 1.0]])
m1 = m1 * Inverse_mat
m1 = np.transpose(m1)
После загрузки матрицы m1 появляется оператор glutSolidCube ().Проблема в том, что куб не находится на видимом экране openGL.Я даже масштабировал и сдвигал параметры tvec для m1.
X = np.array([[1,0,0,x shift],
[0,1,0,y shift],
[0,0,1,z shift],
[0,0,0,1]])
Y = np.array([[tvec[0][0][0]],
[tvec[0][0][1]],
[tvec[0][0][2]],
[1]])
tvec = np.array([[sum(a*b for a,b in zip(X_row,Y_col)) for Y_col in zip(*Y)] for X_row in X])
m1 = np.array([[rmtx[0][0],rmtx[0][1],rmtx[0][2],tvec[0]/scale x],
[rmtx[1][0],rmtx[1][1],rmtx[1][2],tvec[1]/scale y],
[rmtx[2][0],rmtx[2][1],rmtx[2][2],tvec[2]/scale z],
[0.0 ,0.0 ,0.0 ,1.0 ]])
. Это приводит к тому, что куб перемещается над маркером, но он не выровнен должным образом.
Кроме того, значения, используемые для масштабирования и сдвига, соответствуют моему экрану, и я хочу общее решение.Что мне делать?