Как получить или установить параметры камеры в блендереPython

Программы на Python
Ответить
Anonymous
 Как получить или установить параметры камеры в блендере

Сообщение Anonymous »

Я создал простую геометрическую сцену в блендере, где я создал куб (в позиции (5,5,-1), а камера расположена в точке (0,0,0), обращенной между осями x и y.
После этого я хочу самостоятельно визуализировать сцену в Python. Мне это удалось, но положения кубов на изображениях не совпадают.
Изображение

Я использую матрицу камеры 3x3 формы (3x3):

Код: Выделить всё

focal_length = 50
sensor_width = 20
sensor_height = 20

# Calculate the intrinsic matrix
fx = focal_length * width / sensor_width
fy = focal_length * height / sensor_height
cx = width / 2  # principal point is our image center
cy = height / 2

camera_matrix = np.array([
[fx, 0, cx],
[0, fy, cy],
[0, 0, 1]], np.float32)
матрица вращения формы (3x3):

Код: Выделить всё

    angle_x = 90
angle_y = 0
angle_z = 45
rotation_matrix_x = np.array(
[
[1, 0, 0],
[0, np.cos(angle_x), -np.sin(angle_x)],
[0, np.sin(angle_x), np.cos(angle_x)],
]
)

rotation_matrix_y = np.array(
[
[np.cos(angle_y), 0, np.sin(angle_y)],
[0, 1, 0],
[-np.sin(angle_y), 0, np.cos(angle_y)],
]
)

rotation_matrix_z = np.array(
[
[np.cos(angle_z), -np.sin(angle_z), 0],
[np.sin(angle_z), np.cos(angle_z), 0],
[0, 0, 1],
]
)

rotation_matrix = rotation_matrix_x @ rotation_matrix_y @ rotation_matrix_z
и матрица перевода (3x1): Translation_matrix = np.array([[0], [0], [0]])
А затем я определяю свою матрицу проекции следующим образом:

Код: Выделить всё

projection_matrix = camera_matrix @ np.hstack((rotation_matrix, translation_matrix))
Я также добавляю последнюю строку, чтобы получить форму (4x4):

Код: Выделить всё

new_row = np.array([[0, 0, 0, 1]], dtype=np.float32)

projection_matrix = np.vstack((projection_matrix, new_row)
Я создаю 3D-куб (определяя 8 точек):
создал куб [(4.75, 4.75, -1.25), (4.75, 5.25, -1.25) , (5,25, 5,25, -1,25), (5,25, 4,75, -1,25), (4,75, 4,75, -0,75), (4,75, 5,25, -0,75), (5,25, 5,25, -0,75), (5,25, 4,75, -0,75)] с центром: (5, 5, -1)
и преобразуем каждую 3D-точку в 2D:

Код: Выделить всё

def project_3d_to_2d(x, y, z, projection_matrix):
point_3d = np.array([x,y,z,1])
point_after_matrix = projection_matrix@point_3d
#Normalization of the projected point
point_after_matrix /=  point_after_matrix[2] #z coordinate
points_2d = point_after_matrix[:2]
return points_2d
Сгенерированный куб не соответствует кубу из блендера. Я взял матрицу камеры из Блендера, но она другой формы (4х4), и я не могу использовать эту (я тоже получил их проекционную матрицу, но после применения я даже не вижу своего куба).
В Blender у меня есть следующие настройки:
Изображение

Мой большой вопрос:
Могу ли я настроить камеру блендера так, чтобы она точно соответствовала матрице камеры, которую я использовал сам?
Или я могу перевести настройки камеры блендера в матрица моей камеры?
Спасибо вам огромное :)

Подробнее здесь: https://stackoverflow.com/questions/791 ... in-blender
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»