Я пытаюсь написать базовую программу 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, но все равно просто черный экран. = /