2014-12-09 3 views
1

Далее 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 

Результат этого выглядит так: enter image description here Что выглядит разумным для меня, то 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 

Вывод из этих данных: enter image description here

Это не смотреть прямо на меня, но я не могу увидеть, где в матричный стек моя проблема есть. Из вышеизложенного может ли кто-нибудь еще увидеть какую-либо проблему с матричным стеком?

+0

Вы можете ознакомиться с http://www.khanacademy.org/computer-programming/perspective-spin-off-of-3d-magnet/6237326687600640, чтобы узнать, как можно проектировать перспективные прогнозы. – ja72

ответ

0

Как и в оригинальной почте:.

«Так что я вернулся к этому проекту после некоторого перерыва, и я понял, что моя проекция деление (ака/вес) только деление А COORDS Так что, когда я применил матрица пространственного пространства, столбец перевода умножился на значение «больше одного» W, заставляя треугольник перемещаться в верхний правый угол, когда Z уменьшается ».

Смежные вопросы