HLFX.Ru Forum
Показать все 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)


Отправлено XaeroX 23-02-2008 в 19:29:

Cool Matrix Builder

Для начала - что это за программа и что она делает.
Программа эта генерирует функцию на с++, которая в свою очередь построит вам матрицу заданных афинных преобразований.

Те, кто не знает, что такое афинные преобразования, могут смело закрывать страницу и дальше не читать.

Остальные наверное уже поняли, для чего это нужно - чтобы не вызывать glTranslate/glRotate, конечно же. Для того чтобы построить матрицу трансформации именно тогда и там, где это удобно, а в дальнейшем загружать ее в OpenGL вызовом glLoadMatrix/glMultMatrix. Можно использовать эту матрицу и для преобразований на CPU, например, для расчета повернутых/перемещенных с моделькой аттачей, которые использует ваша игровая логика.

Получаемая функция намного оптимизированнее, чем glRotate, т.к. заведомо отбрасывает нулевые слагаемые и не умножает на множитель, если он заведомо равен 1. И вообще, не вычисляет ничего кроме того, что реально нужно.

Программка онлайновая, но написана на Javascript, так что при желании можете ее выкачать каким-нибудь Teleport Pro (там помимо html-файла еще три js-файла).

Ссылка: http://hlfx.ru/matrix.html

О впечатлениях и найденных ошибках, а также предложения по доработке прошу оставлять в этой теме.

__________________

xaerox on Vivino


Отправлено Government-Man 23-02-2008 в 19:38:

Ну я уже заценил. Весьма полезная весч для ГЛщиков. =)


Отправлено XaeroX 23-02-2008 в 19:41:

Government-Man не только гл-щиков Я ж привел пример - посчитать точки аттачей после поворота. Тут всяко надо умножать на матрицу. Другой вопрос что в д3дх есть свои функции - это да.

__________________

xaerox on Vivino


Отправлено Government-Man 23-02-2008 в 20:18:

XaeroX ну у мну пока D3DX с подобными вещами справляется.


Отправлено Дядя Миша 23-02-2008 в 21:48:

Для разворота физ. объектов - вещь незаменимая
*спойлер*
Ку-движки используют извращенные координаты, по сравнению с общепринятыми.


Отправлено FiEctro 24-02-2008 в 07:33:

Круто
Правдо мне врятли пригодится

__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!


Отправлено Government-Man 24-02-2008 в 18:15:

Гыгы... Сейчас с помощью профайлера сравнил скорость матричных ф-ий D3DX с собственными самопальными аналогами... Выяснил, что D3DX медленнее в среднем в 200(!!!) раз!

Я подозревал, что D3DX - тормоз, но чтоб настолько!.. Сейчас в срочном порядке удалаю эту ересь из кода и заменяю своими ф-иями... %)


Отправлено Дядя Миша 24-02-2008 в 18:31:

Government-Man каждый уважающий себя программер пишет матчлибу сам, либо утягивает широкоизвестные


Отправлено XaeroX 17-03-2008 в 16:10:

Изменения в программе:

- добавлены опции "перемещать после вращения" и "Ось Z указывает вверх", специально для построения view-матрицы. Вторая опция - специально для любителей кармаковской системы координат (я тоже являюсь ее любителем )
- исправлена ошибка в функциях умножения матриц - но в матрицах, генерировавшихся в старой версии, эта ошибка не проявлялась.

Как построить view-матрицу:
Какого типа матрица? - "Транспонированная (OpenGL)"
Вокруг какой оси будем поворачивать сначала? "X"
Вокруг какой оси будем поворачивать потом? "Y"
Вокруг какой оси будем поворачивать напоследок? "Z"
А перемещать будем? "Да, после вращения"
Ось Z указывает вверх? Если вы используете кармаковскую систему координат (Quake 1/2/3) - то "Да", иначе "Нет"
Получите функцию. А использовать ее надо примерно так:

C++ Source Code:
BuildViewMatrix(DEG2RAD(-view_angles[ROLL]), DEG2RAD(-view_angles[PITCH]), DEG2RAD(-view_angles[YAW]), inverted_view_origin, view_matrix);
glMatrixMode(GL_MODELVIEW);
glLoadMatrixf(view_matrix);

__________________

xaerox on Vivino


Отправлено LLAPb 27-04-2008 в 16:49:

Возникает такой вот вопрос: А почему, собственно, важен порядок проведения преобразований? Я, конечно, понимаю, что с точки зрения математики порядок умножения матриц имеет значение. Но, с точки зрения логики, какая разница, повернёшь ли ты сначала объект вокруг оси Y, а потом вокруг Z, или наоборот?


Отправлено Дядя Миша 27-04-2008 в 19:50:

LLAPb возъми к примеру бутылку из под пива и попробуй её повернуть сначала влево, а потом вверх, и наоборот, сначала вверх, а потом влево. Это с точки зрения простой логики.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено LLAPb 02-05-2008 в 18:38:

Дядя Миша Да, действительно, что-то я попутал. Если б не этот совет насчёт бутылки...


Временная зона GMT. Текущее время 07:39.
Показать все 12 сообщений этой темы на одной странице

На основе vBulletin версии 2.3.0
Авторское право © Jelsoft Enterprises Limited 2000 - 2002.
Дизайн и программирование: Crystice Softworks © 2005 - 2024