Для начала - что это за программа и что она делает.
Программа эта генерирует функцию на с++, которая в свою очередь построит вам матрицу заданных афинных преобразований.
Те, кто не знает, что такое афинные преобразования, могут смело закрывать страницу и дальше не читать.
Остальные наверное уже поняли, для чего это нужно - чтобы не вызывать glTranslate/glRotate, конечно же. Для того чтобы построить матрицу трансформации именно тогда и там, где это удобно, а в дальнейшем загружать ее в OpenGL вызовом glLoadMatrix/glMultMatrix. Можно использовать эту матрицу и для преобразований на CPU, например, для расчета повернутых/перемещенных с моделькой аттачей, которые использует ваша игровая логика.
Получаемая функция намного оптимизированнее, чем glRotate, т.к. заведомо отбрасывает нулевые слагаемые и не умножает на множитель, если он заведомо равен 1. И вообще, не вычисляет ничего кроме того, что реально нужно.
Программка онлайновая, но написана на Javascript, так что при желании можете ее выкачать каким-нибудь Teleport Pro (там помимо html-файла еще три js-файла).
Government-Man не только гл-щиков Я ж привел пример - посчитать точки аттачей после поворота. Тут всяко надо умножать на матрицу. Другой вопрос что в д3дх есть свои функции - это да.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Гыгы... Сейчас с помощью профайлера сравнил скорость матричных ф-ий D3DX с собственными самопальными аналогами... Выяснил, что D3DX медленнее в среднем в 200(!!!) раз!
Я подозревал, что D3DX - тормоз, но чтоб настолько!.. Сейчас в срочном порядке удалаю эту ересь из кода и заменяю своими ф-иями... %)
- добавлены опции "перемещать после вращения" и "Ось Z указывает вверх", специально для построения view-матрицы. Вторая опция - специально для любителей кармаковской системы координат (я тоже являюсь ее любителем )
- исправлена ошибка в функциях умножения матриц - но в матрицах, генерировавшихся в старой версии, эта ошибка не проявлялась.
Как построить view-матрицу:
Какого типа матрица? - "Транспонированная (OpenGL)"
Вокруг какой оси будем поворачивать сначала? "X"
Вокруг какой оси будем поворачивать потом? "Y"
Вокруг какой оси будем поворачивать напоследок? "Z"
А перемещать будем? "Да, после вращения"
Ось Z указывает вверх? Если вы используете кармаковскую систему координат (Quake 1/2/3) - то "Да", иначе "Нет"
Получите функцию. А использовать ее надо примерно так:
Возникает такой вот вопрос: А почему, собственно, важен порядок проведения преобразований? Я, конечно, понимаю, что с точки зрения математики порядок умножения матриц имеет значение. Но, с точки зрения логики, какая разница, повернёшь ли ты сначала объект вокруг оси Y, а потом вокруг Z, или наоборот?
LLAPb возъми к примеру бутылку из под пива и попробуй её повернуть сначала влево, а потом вверх, и наоборот, сначала вверх, а потом влево. Это с точки зрения простой логики.