Настройка матрицы ModelView с помощью поворота, перевода и т. Д. Против настройки ручной матрицы - PullRequest
0 голосов
/ 13 апреля 2010

При установке матрицы ModelView вы обычно проходите несколько преобразований из единичной матрицы. например:

glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glRotatef(270.0f, 0.0f, 0.0f, 1.0f);
glTranslatef(-rect.size.height / 2, -rect.size.width / 2, 0.0f);

Вместо выполнения этих операций одна за другой (предположим, их больше двух), не будет ли эффективнее просто предварительно рассчитать полученную матрицу и установить для матрицы ModelView эту ручную матрицу?

Ответы [ 2 ]

1 голос
/ 13 апреля 2010

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

Кроме того, если у вас нет проблем с производительностью, я бы не стал беспокоиться об эффективности и просто придерживался того, каким образом ваш код будет проще, что, вероятно, определяет отдельные преобразования.

0 голосов
/ 15 апреля 2010

Хотя я не совсем уверен, превосходные учебники Джеффа Ламарша "OpenGL с нуля", похоже, указывают на то, что умножение матриц происходит в ЦП в любом случае. См. учебное пособие № 7 .

Если вы все еще пытаетесь сделать все как можно быстрее, в его статье есть некоторый код, который использует векторные процессоры iPhone (например, SSE1 / 2/3/4 на рабочем столе) для ускорения кода в 7 раз (от 0,7% времени выполнения до 0,1% на акуле).

Однако повышение производительности может не стоить того, особенно с точки зрения читабельности кода. Если вы хотите, чтобы ваш код работал как можно быстрее, сделайте это, но если нет, подумайте о том, чтобы сохранить преобразования библиотеки, чтобы другие могли понять, что происходит в вашем коде. Все, кто использует OpenGL на iPhone, узнают glTranslatef(x,y,z), но, возможно, не mTranslate(worldview, makeMat(...))

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