Какой смысл в матричном стеке в OpenGL? - PullRequest
5 голосов
/ 21 сентября 2010

Зачем мне использовать матричный стек OpenGL (в отличие от обертывания моего собственного матричного класса и просто его использования)?Я не совсем уверен, почему это так сложно для такой простой задачи.Есть ли какой-то особый вариант использования для этого?

Если в этом нет необходимости, то чем его можно заменить?

Ответы [ 5 ]

12 голосов
/ 21 сентября 2010

Матричные стеки OpenGL (есть несколько, по одному на каждый матричный режим) предназначены для использования с иерархическими моделями.То есть вы можете определить оснащение дочернего объекта (скажем, колеса) относительно его родительского тела (скажем, автомобиля), независимо от местоположения / ориентации родителя, когда ребенок рисуется.То есть он позволяет легко и интуитивно создавать преобразования.

Математические стеки (и матричные операции GL в целом) не могут заменить матричную математическую библиотеку общего назначения.Они просто существуют, чтобы позволить составным преобразованиям эффективно применяться к данным вершин.Как уже говорили другие, эта функциональность была удалена из OpenGL с упадком конвейера с фиксированными функциями, потому что потребности шейдерных программ менее однородны, чем потребности старого конвейера.

2 голосов
/ 21 сентября 2010

Матричный стек используется для объединения матриц. Обычно используется для иерархических моделей, где преобразование выражено относительно другого. Можно загрузить матрицу в стек и преобразовать вершины в этом пространстве, а затем вернуться в родительское пространство, вытолкнув стек. Вы можете сами управлять всем этим в коде, и часто вы бы предпочли - в частности, в случае, когда матрицы используются для других целей, помимо простого рисования или когда вы часто обращаетесь к ним. Анимационная система была бы классическим примером.

2 голосов
/ 21 сентября 2010

Вы бы в основном использовали встроенные матричные стеки, потому что OpenGL будет применять их автоматически.Они были удалены в последних версиях OpenGL, поэтому, по крайней мере, некоторые люди считают, что они не нужны.Лично я считаю, что это было плохое решение, но такова жизнь.Альтернатива состоит в том, чтобы реализовать их самостоятельно - единственное утешение заключается в том, что для большинства применений 3D-графики вам, как правило, придется в любом случае самостоятельно выполнять некоторое умножение матрицы (и такое), поэтому зачастую это не приводит кразница.

1 голос
/ 21 сентября 2010

В этом нет необходимости - вы можете самостоятельно выполнять всю работу с матрицами и постоянно вызывать glLoadMatrix, но также нет необходимости ее заменять Вы просто усложняете жизнь, если используете VBO и отображаете списки.

0 голосов
/ 13 июля 2012

Матрицы - это механизм, с помощью которого геометрия (вершины), которую вы предоставляете, изменяет системы координат и проекцию, чтобы в конечном итоге оказаться на экране в пиксельном пространстве. Таким образом, в этом смысле некоторые матрицы представляют разные системы координат (например, отношения родитель / потомок иерархических моделей, таких как ветви), а некоторые представляют преобразования из мирового пространства для просмотра пространства в пространство устройства (пикселя). По сути, они представляют собой механизм, с помощью которого вы можете манипулировать своими вершинами, но они семантически соответствуют таким операциям, как те. Они поставляются в стек, чтобы с ними было легко программировать.

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