Далее this post from yesterday. Ситуация такая же, как и в исходном сообщении: я реализую свой собственный графический конвейер, нечетную проблему с преобразованиями. Однако теперь я считаю, что проблема заключается не в перспективной проекции, а в более крупной проблеме, чем в этом.Выполнение графического конвейера
Прямо сейчас трубопровод имеет только три этапа, первый преобразует отдельные вершины с использованием модели и проекционных матриц. Следующее собирает их в примитивы, которые в конечном итоге оказываются растеризатором. Это выход из теста:
Это данные вершина:
Vertex1: 0 , 0, -1, 1
Vertex2: 0.5, 1, -1, 1
Vertex3: 1 , 0, -1, 1
При отсутствии преобразования не происходит (то есть модель матрица единичная матрица):
Model Matrix
1.000000 0.000000 0.000000 0.000000
0.000000 1.000000 0.000000 0.000000
0.000000 0.000000 1.000000 0.000000
0.000000 0.000000 0.000000 1.000000
New vert x: 0.000000 y: 0.000000 z: -1.000000 w: 1.000000
New vert x: 0.500000 y: 1.000000 z: -1.000000 w: 1.000000
New vert x: 1.000000 y: 0.000000 z: -1.000000 w: 1.000000
Projection Matrix
1.931371 0.000000 0.000000 0.000000
0.000000 2.414213 0.000000 0.000000
0.000000 0.000000 1.002002 -0.200200
0.000000 0.000000 -1.000000 0.000000
New vert x: 0.000000 y: 0.000000 z: -1.202202 w: 1.000000
New vert x: 0.965685 y: 2.414213 z: -1.202202 w: 1.000000
New vert x: 1.931371 y: 0.000000 z: -1.202202 w: 1.000000
Divide by W
New vert x: 0.000000 y: 0.000000 z: -1.202202 w: 1.000000
New vert x: 0.965685 y: 2.414213 z: -1.202202 w: 1.000000
New vert x: 1.931371 y: 0.000000 z: -1.202202 w: 1.000000
Screenspace Matrix
400.000000 0.000000 0.000000 400.000000
0.000000 320.000000 0.000000 320.000000
0.000000 0.000000 1.000000 0.000000
0.000000 0.000000 0.000000 1.000000
New vert x: 400.000000 y: 320.000000 z: -1.202202 w: 1.000000
New vert x: 786.274170 y: 1092.548340 z: -1.202202 w: 1.000000
New vert x: 1172.548340 y: 320.000000 z: -1.202202 w: 1.000000
Результат этого выглядит так: Что выглядит разумным для меня, то 0,0,0 вершина, по-видимому, центрирована по началу координат, а остальные точки находятся вне экрана, который в -1 от камеры является тем, что я хотел бы ожидать.
Когда я настроить матрицу модели таким образом, чтобы:
Model matrix
1.000000 0.000000 0.000000 -4.799998
0.000000 1.000000 0.000000 -3.999998
0.000000 0.000000 1.000000 -2.300000
0.000000 0.000000 0.000000 1.000000
New vert x: -4.799998 y: -3.999998 z: -3.300000 w: 1.000000
New vert x: -4.299998 y: -2.999998 z: -3.300000 w: 1.000000
New vert x: -3.799998 y: -3.999998 z: -3.300000 w: 1.000000
Projection Matrix
1.931371 0.000000 0.000000 0.000000
0.000000 2.414213 0.000000 0.000000
0.000000 0.000000 1.002002 -0.200200
0.000000 0.000000 -1.000000 0.000000
New vert x: -9.270576 y: -9.656849 z: -3.506807 w: 1.000000
New vert x: -8.304890 y: -7.242636 z: -3.506807 w: 1.000000
New vert x: -7.339205 y: -9.656849 z: -3.506807 w: 1.000000
Divide by W
New vert x: -2.809265 y: -2.926318 z: -1.062669 w: 3.300000
New vert x: -2.516633 y: -2.194738 z: -1.062669 w: 3.300000
New vert x: -2.224001 y: -2.926318 z: -1.062669 w: 3.300000
Screenspace Matrix
400.000000 0.000000 0.000000 400.000000
0.000000 320.000000 0.000000 320.000000
0.000000 0.000000 1.000000 0.000000
0.000000 0.000000 0.000000 1.000000
New vert x: 196.293823 y: 119.578247 z: -1.062669 w: 3.300000
New vert x: 313.346680 y: 353.683777 z: -1.062669 w: 3.300000
New vert x: 430.399414 y: 119.578247 z: -1.062669 w: 3.300000
Вывод из этих данных:
Это не смотреть прямо на меня, но я не могу увидеть, где в матричный стек моя проблема есть. Из вышеизложенного может ли кто-нибудь еще увидеть какую-либо проблему с матричным стеком?
Вы можете ознакомиться с http://www.khanacademy.org/computer-programming/perspective-spin-off-of-3d-magnet/6237326687600640, чтобы узнать, как можно проектировать перспективные прогнозы. – ja72