Как рассчитать матрицу преобразования для шейдера в OpenGL - PullRequest
0 голосов
/ 15 марта 2012

В более новых спецификациях OpenGL убраны функции манипулирования матрицей.Вам нужно вручную вычислить матрицы преобразования и передать их шейдерам.Хотя glRotate, glScale и т. Д. Исчезли, я ничего не увидел взамен ...

Мой вопрос:

как вы справляетесь с преобразованиями?Вы копаете теорию и реализуете все вручную или используете какие-то предопределенные библиотеки?Есть ли какое-нибудь «официальное» решение OpenGL?

Например, datenwolf указывает на его созданную вручную библиотеку C в этом посте .Для пользователей Java (Android) существует класс AffineTransform , но он применяется к матрицам 3x3, поэтому для его применения к OpenGL mat4

* 1017 требуется дополнительное усилие. Каково ваше решение?

Ответы [ 3 ]

3 голосов
/ 15 марта 2012

Я согласен с datenwolf, но для примера я использую Eigen , которая является фантастической математикой общего назначения.

3 голосов
/ 15 марта 2012

как вы справляетесь с преобразованиями?Вы копаете теорию и все реализуете вручную или используете какие-то предопределенные библиотеки?

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

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

Таким образом, вы обычно получаетенемного смеси.Часть математики входит в существующие библиотеки, другие вы реализуете сами.

0 голосов
/ 31 мая 2013

выше glsl 3.0 функции glTraslate (), glRotate (), fTransform () и т. Д. Устарели ... но все еще могут использоваться.

один лучший способ - использовать математическую библиотеку, например GLM http://glm.g -truc.net / , которая совместима со спецификациями glsl.

Матрица проекции, матрица модели и матрица вида передаются в шейдер в виде равномерных переменных.

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