2012-03-15 5 views
-1

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

Мой вопрос:

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

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

Каково ваше решение?

+0

-1: Это вопрос опроса. Они не приветствуются в SO. –

+0

@NicolBolas: Я не согласен. Существует явная проблема: «Нет поддержки OpenGL для преобразований, что с этим делать?». Вы можете задать каждый второй вопрос, говоря, что это опрос. –

+0

Нет, вы спросили: «Каково ваше решение?» Это вопрос опроса, потому что * у каждого * есть другое решение. Вы спрашиваете нас, как мы справляемся с этим. –

ответ

3

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

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

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

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

3

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

+0

+1 для упоминания Eigen – datenwolf

0

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

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

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

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