![]() |
Показать все 12 сообщений этой темы на одной странице |
HLFX.Ru Forum (https://hlfx.ru/forum/index.php)
- OpenGL (https://hlfx.ru/forum/forumdisplay.php?forumid=7)
-- Matrix Builder (https://hlfx.ru/forum/showthread.php?threadid=1178)
Matrix Builder
Для начала - что это за программа и что она делает.
Программа эта генерирует функцию на с++, которая в свою очередь построит вам матрицу заданных афинных преобразований.
Те, кто не знает, что такое афинные преобразования, могут смело закрывать страницу и дальше не читать.
Остальные наверное уже поняли, для чего это нужно - чтобы не вызывать glTranslate/glRotate, конечно же. Для того чтобы построить матрицу трансформации именно тогда и там, где это удобно, а в дальнейшем загружать ее в OpenGL вызовом glLoadMatrix/glMultMatrix. Можно использовать эту матрицу и для преобразований на CPU, например, для расчета повернутых/перемещенных с моделькой аттачей, которые использует ваша игровая логика.
Получаемая функция намного оптимизированнее, чем glRotate, т.к. заведомо отбрасывает нулевые слагаемые и не умножает на множитель, если он заведомо равен 1. И вообще, не вычисляет ничего кроме того, что реально нужно.
Программка онлайновая, но написана на Javascript, так что при желании можете ее выкачать каким-нибудь Teleport Pro (там помимо html-файла еще три js-файла).
Ссылка: http://hlfx.ru/matrix.html
О впечатлениях и найденных ошибках, а также предложения по доработке прошу оставлять в этой теме.
__________________
Ну я уже заценил. Весьма полезная весч для ГЛщиков. =)
Government-Man не только гл-щиков Я ж привел пример - посчитать точки аттачей после поворота. Тут всяко надо умножать на матрицу. Другой вопрос что в д3дх есть свои функции - это да.
__________________
XaeroX ну у мну пока D3DX с подобными вещами справляется.
Для разворота физ. объектов - вещь незаменимая
*спойлер*
Ку-движки используют извращенные координаты, по сравнению с общепринятыми.
Круто
Правдо мне врятли пригодится
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Гыгы... Сейчас с помощью профайлера сравнил скорость матричных ф-ий D3DX с собственными самопальными аналогами... Выяснил, что D3DX медленнее в среднем в 200(!!!) раз!
Я подозревал, что D3DX - тормоз, но чтоб настолько!.. Сейчас в срочном порядке удалаю эту ересь из кода и заменяю своими ф-иями... %)
Government-Man каждый уважающий себя программер пишет матчлибу сам, либо утягивает широкоизвестные
Изменения в программе:
- добавлены опции "перемещать после вращения" и "Ось Z указывает вверх", специально для построения view-матрицы. Вторая опция - специально для любителей кармаковской системы координат (я тоже являюсь ее любителем )
- исправлена ошибка в функциях умножения матриц - но в матрицах, генерировавшихся в старой версии, эта ошибка не проявлялась.
Как построить view-матрицу:
Какого типа матрица? - "Транспонированная (OpenGL)"
Вокруг какой оси будем поворачивать сначала? "X"
Вокруг какой оси будем поворачивать потом? "Y"
Вокруг какой оси будем поворачивать напоследок? "Z"
А перемещать будем? "Да, после вращения"
Ось Z указывает вверх? Если вы используете кармаковскую систему координат (Quake 1/2/3) - то "Да", иначе "Нет"
Получите функцию. А использовать ее надо примерно так:
BuildViewMatrix(DEG2RAD(-view_angles[ROLL]), DEG2RAD(-view_angles[PITCH]), DEG2RAD(-view_angles[YAW]), inverted_view_origin, view_matrix); |
glMatrixMode(GL_MODELVIEW); |
glLoadMatrixf(view_matrix); |
__________________
Возникает такой вот вопрос: А почему, собственно, важен порядок проведения преобразований? Я, конечно, понимаю, что с точки зрения математики порядок умножения матриц имеет значение. Но, с точки зрения логики, какая разница, повернёшь ли ты сначала объект вокруг оси Y, а потом вокруг Z, или наоборот?
LLAPb возъми к примеру бутылку из под пива и попробуй её повернуть сначала влево, а потом вверх, и наоборот, сначала вверх, а потом влево. Это с точки зрения простой логики.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша Да, действительно, что-то я попутал. Если б не этот совет насчёт бутылки...
Временная зона GMT. Текущее время 07:39. | Показать все 12 сообщений этой темы на одной странице |
На основе vBulletin версии 2.3.0
Авторское право © Jelsoft Enterprises Limited 2000 - 2002.
Дизайн и программирование: Crystice Softworks © 2005 - 2024