HLFX.Ru Forum
Показать все 12 сообщений этой темы на одной странице

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:

Red face 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 )
2
{
3
  AngleVectors( rgflVector, svgame.globals->v_forward, svgame.globals->v_right, svgame.globals->v_up );
4
}

Вообще не вижу разницы, да и нету её. Глобалсы удобнее тем, что не надо заводить каждый раз три переменных. Можно конечно там 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 флоатов, а в другой класс, там он во всех библиотеках класс.

__________________

xaerox on Vivino


Отправлено ~ 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".

__________________

xaerox on Vivino


Отправлено ~ X ~ 05-11-2013 в 14:04:

C++ Source Code:
1
// GCC doesn't like this
2
//#define ALLOW_ANONYMOUS_STRUCT to use anonymous unions
3
 
4
 
5
class Vector
6
{
7
public:
8
#if defined (ALLOW_ANONYMOUS_STRUCT)
9
  union
10
  {
11
    vec_t array[3];
12
    struct
13
    {
14
      vec_t x;
15
      vec_t y;
16
      vec_t z;
17
    };
18
  };
19
#else
20
  vec_t x;
21
  vec_t y;
22
  vec_t z;
23
#endif
24
 

, например. С юнионами мне нравилось больше.

__________________
Минутка полезного:
Бесплатный UT-подобный Half-Life mod.
Бесплатный редактор для 32-битных текстур. Без дотнета.
Бесплатный IDE для любых компиляторов и ЯП.
Бесплатная Windows-подобная ОС.
Проверка грамматики русского языка.
Чат по hl[fx]: [email protected]


Отправлено XaeroX 05-11-2013 в 14:09:

Ну, да, наглядно. Если бы не anonymous unions.

__________________

xaerox on Vivino


Отправлено 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:

Ну да. Перегрузка операторов - величайшее зло и плохой стиль программирования.

__________________

xaerox on Vivino


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

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