Что делает матрица ModelViewProjection в OpenGL ES 2.0?

Всем привет!

Работая с шейдерами в Android, возник небольшой диссонанс в понимании происходящего, не могу сообразить, что у меня должно присваиваться переменной gl_Position внутри шейдера.

Рассмотрим два случая:

1) Я передаю в шейдер координаты точек 3D с координатами лежащими внутри единичного куба. Внутри вершинного шедера я просто их присваиваю(приводя к однородному виду) переменной gl_Position и при работе Шейдер сам проецирует эти точки на плоскость экрана в соответствии с текущим viewport.

2)Теперь допустим, что в шейдер я передаю атрибут с 3D координатами вершины и матрицу Model-View-Projection. Применяя MVP матрицу к координатам вершины, я получу 2D координаты на некоторой плоскости (допустим они лежат в пределах некоторой VGA картинки). И вот тут возникает диссонанс, как должны соотноситься эта результирующая плоскость и мой текущий viewport, в каком виде мне нужно класть полученные координаты в gl_Position и что шейдер будет делать дальше с этими точками перед отрисовкой, ведь там координаты уже не ограничены единичным кубом?

Кто-то может разъяснить мне эти вопросы?
Заранее спасибо!
  • Вопрос задан
  • 3534 просмотра
Пригласить эксперта
Ответы на вопрос 1
kosmos89
@kosmos89
Шейдер сам проецирует

Шейдер же ты пишешь, как он может сам что-то делать? Это блок растеризации их "проецирует".
Процесс таков: на выходе вершинного шейдера получаются трехмерные гомогенные координаты вершин. Аппаратный растеризатор берет эти вершины, делит x,y,z на w и рисует только те, которые попадают в куб (-1,-1,-1)-(1,1,1) (на самом деле тут еще надо учесть треугольники, находящиеся частично за пределами экрана). При этом координаты x и y определяют координаты результирующего пикселя на экране.

Матрица проекции должна быть построена таким образом, чтобы в координату w записывалось значение как-то связанное с z.
Подробнее можно узнать тут
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы