Непонимание матрицы модель-вид-проекция в OpenGL - PullRequest
2 голосов
/ 05 мая 2020

Я пытаюсь написать базовую программу c в современном OpenGL, используя Python и пиглет. Я могу разместить на экране простой треугольник с разными цветами для каждого из углов. Я нахожусь в точке, где я пытаюсь добавить матрицу проекции и вида, чтобы я мог перемещать «камеру» в трехмерном пространстве, но она сохраняет черный экран, когда я добавляю обе матрицы. Я могу добавить матрицу проекции, и она работает должным образом. Я могу просто добавить матрицу вида, и она все равно будет показывать треугольник. Однако, когда я умножаю матрицу вида и матрицу проекции вместе, получается черный экран.

Поскольку я могу создать цветной треугольник с матрицей проекции, я думаю, могу безопасно предполагаем, что весь мой контекст OpenGL действителен. Так что, возможно, я неправильно понял математику.

Вот краткое изложение моего соответствующего кода:

import pyrr

fov = 60
aspect_ratio = 800 / 600 #width / height
near_clip = 0.1
far_clip = 100

#create a perspective matrix
projection_matrix = pyrr.matrix44.create_perspective_projection(
fov,
aspect_ratio,
near_clip,
far_clip
)

view_matrix = pyrr.matrix44.creat_look_at(
pyrr.vector3.create(0, 0, 1), #camera position
pyrr.vector3.create(0, 0, 0), #camera target
pyrr.vector3.create(0, 1, 0)  #camera up vector
)

mvp_matrix = projection_matrix * view_matrix

Отсюда я перевожу mvp_matrix в массив c_types, который может понять OpenGL. Я не думаю, что код, который выполняет перевод, актуален, поскольку он правильно работает только с матрицей проекции.

Вот матрицы, которые мне дает pyrr:

Projection Matrix:
[[ 1.15470054  0.          0.          0.        ]
 [ 0.          1.73205081  0.          0.        ]
 [ 0.          0.         -1.002002   -1.        ]
 [ 0.          0.         -0.2002002   0.        ]]

View Matrix:
[[1.  0.  0.  0.]
 [0.  1.  0.  0.]
 [0.  0.  1.  0.]
 [0.  0. -1.  1.]]

MVP Matrix:
[[ 1.15470054  0.          0.          0.        ]
 [ 0.          1.73205081  0.          0.        ]
 [ 0.          0.         -1.002002   -0.        ]
 [ 0.          0.         -0.          0.        ]]

Любые идеи почему только матрица проекции может отображать треугольник, но когда я добавляю в матрицу вида, она показывает только черные экраны?

Я пытался сделать треугольник действительно большим по всем x, y и ось z, но все равно просто черный экран. = /

1 Ответ

0 голосов
/ 06 мая 2020

После еще нескольких тестов я обнаружил, что модуль pyrr странным образом выполняет умножение матриц. Однако Pyrr построен на numpy, поэтому после использования:

numpy.matmul(projection_matrix, view_matrix)

, он смог правильно создать матрицу MVP.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...