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

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

Сообщение Anonymous »

Я создал простую геометрическую сцену в блендере, в которой создал куб.
После этого я хочу самостоятельно визуализировать сцену в Python. Мне удалось, но положения кубиков на изображениях не совпадают. Как вы можете видеть на следующем изображении.
Изображение

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

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

focal_length = 25 #blender has 50 (but with 50 the zoom is even stronger)
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
и матрица перевода: 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.5, 4.5, -1.5), (4.5, 5.5, -1.5) , (5,5, 5,5, -1,5), (5,5, 4,5, -1,5), (4,5, 4,5, -0,5), (4,5, 5.5, -0.5), (5.5, 5.5, -0.5), (5.5, 4.5, -0.5)] с центром: (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 у меня есть следующие настройки:
Изображение

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

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

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

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

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

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

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