HLFX.Ru Forum (https://hlfx.ru/forum/index.php)
- Half-Life SDK (https://hlfx.ru/forum/forumdisplay.php?forumid=8)
-- MakeVectors vs VECTOR_ANGLES (https://hlfx.ru/forum/showthread.php?threadid=4147)
Отправлено ~ X ~ 01-11-2013 в 20:17:
MakeVectors vs VECTOR_ANGLES
Все любят
UTIL_MakeVectors(angles);
и потом кушать всякие gpGlobals->v_*
а мне больше нравится
Vector fwd;
ANGLE_VECTORS(angles, fwd, NULL, NULL);
и кушать fwd.
Каковы ваши за и против?
Мои "за":
- не считаются ненужные векторы - ПРОФИТ!!
- не закакиваются глобалы, которые вечно всеми путаются
- просто наглядно
amirite?
выскажитесь.
__________________
Минутка полезного:
Бесплатный UT-подобный Half-Life mod.
Бесплатный редактор для 32-битных текстур. Без дотнета.
Бесплатный IDE для любых компиляторов и ЯП.
Бесплатная Windows-подобная ОС.
Проверка грамматики русского языка.
Чат по hl[fx]: [email protected]
Отправлено Дядя Миша 01-11-2013 в 20:30:
C++ Source Code:
1 | void pfnMakeVectors( const float *rgflVector ) |
3 | AngleVectors( rgflVector, svgame.globals->v_forward, svgame.globals->v_right, svgame.globals->v_up ); |
Вообще не вижу разницы, да и нету её. Глобалсы удобнее тем, что не надо заводить каждый раз три переменных. Можно конечно там NULL понапихать, но всё равно минимум одну заводить придётся.__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено XaeroX 02-11-2013 в 08:59:
Цитата:
~ X ~ писал:
просто наглядно
Я бы поспорил. У тебя fwd - Vector? Наглядно то, что ты передаёшь его по значению в функцию, и следовательно, в него ничего не запишется. И только знающие люди сообразят, что при этом вызывается оператор каста в флоат*. Вот она, типично вальвовская наглядность. Учитесь, товарищи!
ЗЫ: в волатиле надо было бы написать:
ANGLE_VECTORS(angles, &fwd, NULL, NULL);
Т.е. взять адрес именно вектора, никаких неочевидных кастов. Но в волатиле и нет такой срани, когда вектор в одной дллке - арай из 3 флоатов, а в другой класс, там он во всех библиотеках класс.
Отправлено ~ X ~ 03-11-2013 в 20:30:
Не придирайся 
у меня передача по ссылке или через анонимный юнион или через адрес.... короче, быстро. свой класс Vector я перелопатил весьма сильно (только SIMD не напихал), но речь не об этом.
Вобщем, экономия на неиспользуемых векторах у меня получилась гигантской. Теоретически, на создание временного Vector fwd уходит некоторое кол-во ресурсов, но мат. операции внутри AngleVectors() намного длиннее, имхо.
Кстати, в XDM во всяких TraceAttack(), например, я все векторы передаю как "const Vector &", что есть ня и кавай. :3
__________________
Минутка полезного:
Бесплатный UT-подобный Half-Life mod.
Бесплатный редактор для 32-битных текстур. Без дотнета.
Бесплатный IDE для любых компиляторов и ЯП.
Бесплатная Windows-подобная ОС.
Проверка грамматики русского языка.
Чат по hl[fx]: [email protected]
Отправлено pRoxxx 03-11-2013 в 21:17:
Цитата:
~ X ~ писал:
Вобщем, экономия на неиспользуемых векторах у меня получилась гигантской.
О боже, я знал, знал что появиться такой человек на форуме который сделает старый голд сорс намного производительней! Я даже слышал что вам светит нобелевская премия за ваш вклад в геймдев!
Отправлено XaeroX 03-11-2013 в 22:31:
Цитата:
~ X ~ писал:
анонимный юнион
Любишь варнинги гцц? Или просто не включаешь их? 
Цитата:
~ X ~ писал:
только SIMD не напихал
И славабогу, а то тормоза будут те ещё.
Цитата:
~ X ~ писал:
на создание временного Vector fwd уходит некоторое кол-во ресурсов
Внезапно - ничуть не больше, чем на создание арея из 3 флоатов. 
Цитата:
~ X ~ писал:
я все векторы передаю как "const Vector &", что есть ня и кавай
Можно и как float*, тащемта, разницы нет, каст оптимизируется в релизе. Главное - не как просто "Vector".
Отправлено ~ X ~ 05-11-2013 в 14:04:
C++ Source Code:
1 | // GCC doesn't like this |
2 | //#define ALLOW_ANONYMOUS_STRUCT to use anonymous unions |
8 | #if defined (ALLOW_ANONYMOUS_STRUCT) |
, например. С юнионами мне нравилось больше.__________________
Минутка полезного:
Бесплатный UT-подобный Half-Life mod.
Бесплатный редактор для 32-битных текстур. Без дотнета.
Бесплатный IDE для любых компиляторов и ЯП.
Бесплатная Windows-подобная ОС.
Проверка грамматики русского языка.
Чат по hl[fx]: [email protected]
Отправлено XaeroX 05-11-2013 в 14:09:
Ну, да, наглядно. Если бы не anonymous unions. 
Отправлено ONeiLL 05-11-2013 в 14:17:
Что такое юнион я понимаю. как это работает - понимаю. вопрос - зачем так делать?
Отправлено ~ X ~ 05-11-2013 в 14:23:
Большая хитрость и профит видны в дальнейшем, когда идёт обращение к элементам ветора как к членам или как к элементам массива (не надо изобретать хак с operator []).
__________________
Минутка полезного:
Бесплатный UT-подобный Half-Life mod.
Бесплатный редактор для 32-битных текстур. Без дотнета.
Бесплатный IDE для любых компиляторов и ЯП.
Бесплатная Windows-подобная ОС.
Проверка грамматики русского языка.
Чат по hl[fx]: [email protected]
Отправлено ONeiLL 05-11-2013 в 14:26:
то есть это сделано для того что бы не перегружать оператор [], верно? тогда понятно
Отправлено XaeroX 05-11-2013 в 16:07:
Ну да. Перегрузка операторов - величайшее зло и плохой стиль программирования.