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

HLFX.Ru Forum (https://hlfx.ru/forum/index.php)
- Half-Life SDK (https://hlfx.ru/forum/forumdisplay.php?forumid=8)
-- Помогите немного( а может и много ) (https://hlfx.ru/forum/showthread.php?threadid=3446)


Отправлено ONeiLL 29-05-2012 в 16:49:

Помогите немного( а может и много )

Я вот сегодня утром быстренько наклепал код

C++ Source Code:
1
void CBaseEntity::FireBulletsWater( Vector vecSrc, Vector vecEnd )
2
{
3
  if( ( POINT_CONTENTS( vecEnd ) == CONTENTS_WATER && POINT_CONTENTS( vecSrc ) == CONTENTS_WATER )
4
    || POINT_CONTENTS( vecEnd ) != CONTENTS_WATER && POINT_CONTENTS( vecSrc ) != CONTENTS_WATER )
5
  return;
6
 
7
  // Ищем растояние между vecSrc и vecEnd
8
  float x = vecEnd.x - vecSrc.x;
9
  float y = vecEnd.y - vecSrc.y;
10
  float z = vecEnd.z - vecSrc.z;
11
  float len = sqrt( x * x + y * y + z * z );
12
 
13
  // Делим по полам
14
  Vector vecTemp = Vector( ( vecEnd.x + vecSrc.x ) / 2, ( vecEnd.y + vecSrc.y ) / 2, ( vecEnd.z + vecSrc.z ) / 2 );
15
 
16
  if( len <= 1 )
17
  {
18
    UTIL_Ricochet( vecTemp, 1 );	// Только не смейтесь =)
19
    // За место этого надо рисовать брызги
20
  }
21
  else
22
  {
23
    if( POINT_CONTENTS( vecTemp ) == POINT_CONTENTS( vecEnd ) )
24
      FireBulletsWater( vecSrc, vecTemp );
25
    else
26
      FireBulletsWater( vecTemp, vecEnd );
27
  }
28
}


Эта функция методом бсп поиска находит точку соприкосновения пули с поверхностью воды (находит правильно, и даёт ошибку не больше чем на 0.5 юнита). Но у меня всегда были проблемы с эффектами, и я не могу до конца доделать
Подскажите, как лутше всё организовать, как отрисовать эти самые брызги и т.д. Можно всё расказать на словах, не обязательно на коде


Отправлено XaeroX 29-05-2012 в 16:54:

TE_STREAKSPLASH


Отправлено ONeiLL 29-05-2012 в 17:25:

// coord coord coord (start position)
// coord coord coord (direction vector)
// byte (color)
// short (count)
// short (base speed)
// short (ramdon velocity)

Смущают две последние строчки, как это:
базовая скорость и рандомная скорость ????

Добавлено 29-05-2012 в 20:25:

C++ Source Code:
1
void UTIL_Splash( const Vector &position, const Vector &direction, short count, short speed, short randspeed )
2
{
3
  MESSAGE_BEGIN( MSG_PVS, SVC_TEMPENTITY, position );
4
 
5
  WRITE_BYTE( TE_STREAK_SPLASH );
6
 
7
  WRITE_COORD( position.x );
8
  WRITE_COORD( position.y );
9
  WRITE_COORD( position.z );
10
 
11
  WRITE_COORD( direction.x );
12
  WRITE_COORD( direction.y );
13
  WRITE_COORD( direction.z );
14
 
15
  WRITE_BYTE( 0 );
16
  WRITE_BYTE( 0 );
17
  WRITE_BYTE( 100 );
18
 
19
  WRITE_SHORT( count );
20
 
21
  WRITE_SHORT( speed );
22
  WRITE_SHORT( randspeed );
23
 
24
  MESSAGE_END();
25
}


Но при вызове эта шняга кидает такое:

BAD: 73:svc_bad
Host_Error: CL_ParseServerMessage: Illegible server message - svc_ba


Отправлено Дядя Миша 29-05-2012 в 17:53:

Цитата:
ONeiLL писал:
Эта функция методом бсп поиска находит точку соприкосновения пули с поверхностью воды

не BSP. Просто бинарным

__________________
My Projects: download page

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

Цитата:

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


Отправлено ONeiLL 29-05-2012 в 17:55:

А какая разница?


Отправлено XaeroX 29-05-2012 в 17:57:

Цитата:
ONeiLL писал:
// byte (color)

Написано же - цвет это ОДИН байт. Зачем ты целых три шлёшь?
В данном случае это индекс из палитры. Индекс синего не помню, но он там точно есть, я юзал когда-то.


Отправлено ONeiLL 29-05-2012 в 18:38:

Эх, криво получается, я наверно лутше напишу сам этот эффект, опираясь на тутор от кутузова

Добавлено 29-05-2012 в 21:38:

З.Ы спасибо Хавку, что напомнил мне про это =)


Отправлено ONeiLL 30-05-2012 в 07:12:

Ладно, вроде получилась, у кого есть подходящие спрайты?


Отправлено Lev 30-05-2012 в 09:36:

Может в хл2 есть


Отправлено ONeiLL 30-05-2012 в 09:51:

Я искал, нашол, но мне нужен анимированый, а с такими вещами как фотошоп и т.д я не дружу


Отправлено Lev 30-05-2012 в 09:52:

А ты на обычном хл сдк делаешь или на спирите?


Отправлено ONeiLL 30-05-2012 в 09:55:

Обычный


Отправлено Lev 30-05-2012 в 10:02:

А с фанк ватер твой способ определения работает?


Отправлено ONeiLL 30-05-2012 в 10:06:

да

Добавлено 30-05-2012 в 13:06:

Только лутше зделать по другому, вот так:

C++ Source Code:
1
void CBaseEntity::FireBulletsWater( Vector vecSrc, Vector vecEnd )
2
{
3
  if( ( POINT_CONTENTS( vecEnd ) == CONTENTS_WATER && POINT_CONTENTS( vecSrc ) == CONTENTS_WATER )
4
    || ( POINT_CONTENTS( vecEnd ) != CONTENTS_WATER && POINT_CONTENTS( vecSrc ) != CONTENTS_WATER ) )
5
  return;
6
 
7
  // Ищем растояние между vecSrc и vecEnd
8
  float x = vecEnd.x - vecSrc.x;
9
  float y = vecEnd.y - vecSrc.y;
10
  float z = vecEnd.z - vecSrc.z;
11
  float len = sqrt( x * x + y * y + z * z );
12
 
13
  // Делим по полам
14
  Vector vecTemp = Vector( ( vecEnd.x + vecSrc.x ) / 2, ( vecEnd.y + vecSrc.y ) / 2, ( vecEnd.z + vecSrc.z ) / 2 );
15
 
16
  if( len <= 1 )
17
  {
18
    // Рисуем =)
19
  }
20
  else
21
  {
22
    if( POINT_CONTENTS( vecTemp ) != POINT_CONTENTS( vecSrc ) )
23
      FireBulletsWater( vecSrc, vecTemp );
24
    else
25
      FireBulletsWater( vecTemp, vecEnd );
26
  }
27
}


Отправлено Lev 30-05-2012 в 10:22:

У меня есть один убогий спрайт - вот


Отправлено ONeiLL 30-05-2012 в 10:49:

ух
Спасибо, уже хоть что нибудь

Добавлено 30-05-2012 в 13:49:

Мдя, спрайт реально убогий, может тут найдётся фотошопер?
В аттаче два изображения, их надо зделать анимироваными, чтобы splash1.tga расширялся, а splash3.tga рос сначала вверх, а потом назад ставал маленьким. Если получится красиво, обещаю что выложу тутор =)


Отправлено Lev 30-05-2012 в 18:11:

Не очень правда - но можно и подправить


Отправлено ONeiLL 30-05-2012 в 18:15:

Спасибо!!! Нормально, сойдёт наверно ))


Отправлено Jimmy C. 30-05-2012 в 18:17:

ONeiLL в Sven coop есть точно такая же фишка, ковырни спрайты оттуда

__________________
Все что делает маппер, программист делает в движке, поскольку ему лень. ©Дядя Миша


Отправлено Lev 30-05-2012 в 18:17:

Вот если что исходные кадры


Отправлено ONeiLL 30-05-2012 в 19:41:

Блин, как заставить спрайт смотреть вверх ???


Отправлено Дядя Миша 30-05-2012 в 19:44:

Элементарно, Уотсон. Надо его скомпилить с параметром parallel upright, чота такое. Или facing upright. Различие лишь в том, будет ли спрайт крутиться по ROLL или не будет.

__________________
My Projects: download page

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

Цитата:

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


Отправлено ONeiLL 30-05-2012 в 19:49:

vp_parallel_upright


Отправлено Дядя Миша 30-05-2012 в 19:53:

Оно и для огня годится и для травы. Полезный режым.

__________________
My Projects: download page

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

Цитата:

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


Отправлено ONeiLL 30-05-2012 в 20:00:

А теперь, чтобы просто лежало на воде, какой нужен параметр?


Отправлено Дядя Миша 30-05-2012 в 20:27:

Oriented. И нормаль вверх через VecToAngles.

__________________
My Projects: download page

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

Цитата:

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


Отправлено ONeiLL 01-06-2012 в 17:40:

Скриншоты

http://rghost.ru/38420592
1.3 МБ

Пока не зделал круга на воде, посмотрю, как у дождика бузера зделано =)


Отправлено Дядя Миша 01-06-2012 в 18:22:

Поиск называется просто бинарным, потому что никакое дерево при этом не строится. Ты просто делишь трассу пополам, потом еще раз пополам и так пока не найдешь точку пересечения.
Только в твоем конкретном случае это не работает. Потому что, судя по скриншотам брызги рисуются на дне, как минимум в половине случаев.

__________________
My Projects: download page

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

Цитата:

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


Отправлено ONeiLL 01-06-2012 в 18:25:

Это тебе кажется


Отправлено Дядя Миша 01-06-2012 в 18:26:

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

__________________
My Projects: download page

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

Цитата:

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


Отправлено ONeiLL 01-06-2012 в 18:27:

Аа, я понял. Просто я поставил флаг FTENT_GRAVITY
и спрайт опускается


Отправлено Ku2zoff 01-06-2012 в 18:29:

ONeiLL видио давай! На скринах и впрямь кажется, что брызги рисуются в конечной точке трейса. Или скрины на непрозрачной воде сделай.


Отправлено ONeiLL 01-06-2012 в 18:32:

Потом видео зделаю. Вот сейчас убрал флаг FTENT_GRAVITY.
Вот как:


Отправлено Ku2zoff 01-06-2012 в 18:34:

ONeiLL лолшто? Брызги при стрельбе из-под воды? Кхм, сделай проверку на то, находится ли начальная точка трейса под водой.


Отправлено ONeiLL 01-06-2012 в 18:36:

вложение

Добавлено 01-06-2012 в 21:36:

Ku2zoff , я специально это зделал


Отправлено Дядя Миша 01-06-2012 в 18:41:

самые хорошие брызги в Quake 2 Evolved 0.40

__________________
My Projects: download page

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

Цитата:

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


Отправлено ONeiLL 01-06-2012 в 18:44:

Лень качать


Отправлено ONeiLL 02-06-2012 в 10:27:

Кстать, хотел спросить, откуда ты знаеш про эти параметры у спрайтов? Можеш кинуть статейку?


Отправлено Дядя Миша 02-06-2012 в 10:47:

Цитата:
ONeiLL писал:
Кстать, хотел спросить, откуда ты знаеш про эти параметры у спрайтов?

да я тут совершенно случайно Xash3D написал. Если бы не это - нипочем бы не узнал.

__________________
My Projects: download page

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

Цитата:

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


Отправлено ONeiLL 02-06-2012 в 11:55:

pTemp->entity.angles = UTIL_VecToAngles( Vector( x, y, z + 10 ) );

Так написал. Стрельнул в воду и получил зависон (


Отправлено Дядя Миша 02-06-2012 в 13:27:

дак у тебе наверное X, Y или Z - NAN

__________________
My Projects: download page

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

Цитата:

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


Отправлено ONeiLL 02-06-2012 в 14:05:

А что такое NAN ???

Добавлено 02-06-2012 в 16:35:

Чтобы всем было понятнее

C++ Source Code:
1
void EV_HLDM_WaterSplash( float x, float y, float z )
2
{
3
  int  iWaterSplash = gEngfuncs.pEventAPI->EV_FindModelIndex ("sprites/effects/splash1.spr");
4
  TEMPENTITY *pTemp = gEngfuncs.pEfxAPI->R_TempSprite( Vector( x, y, z + 50 ),
5
  Vector( 0, 0, 0 ),
6
  0.5, iWaterSplash, kRenderTransAdd, kRenderFxNone, 1.0, 0.5, FTENT_SPRANIMATE | FTENT_FADEOUT | FTENT_COLLIDEKILL );
7
 
8
  if(pTemp)
9
  {
10
    pTemp->fadeSpeed = 90.0;
11
    pTemp->entity.curstate.framerate = 100.0;
12
    pTemp->entity.curstate.renderamt = 155;
13
    pTemp->entity.curstate.rendercolor.r = 255;
14
    pTemp->entity.curstate.rendercolor.g = 255;
15
    pTemp->entity.curstate.rendercolor.b = 255;
16
  }
17
 
18
  iWaterSplash = gEngfuncs.pEventAPI->EV_FindModelIndex ("sprites/effects/splash2.spr");
19
  pTemp = gEngfuncs.pEfxAPI->R_TempSprite( Vector( x, y, z ),
20
  Vector( 0, 0, 0 ),
21
  0.2, iWaterSplash, kRenderTransAdd, kRenderFxNone, 1.0, 0.5, FTENT_SPRANIMATE | FTENT_FADEOUT | FTENT_COLLIDEKILL );
22
 
23
  if(pTemp)
24
  {
25
    pTemp->fadeSpeed = 60.0;
26
    pTemp->entity.curstate.framerate = 50.0;
27
    pTemp->entity.curstate.renderamt = 100;
28
    pTemp->entity.curstate.rendercolor.r = 255;
29
    pTemp->entity.curstate.rendercolor.g = 255;
30
    pTemp->entity.curstate.rendercolor.b = 255;
31
    pTemp->entity.angles = UTIL_VecToAngles( Vector( x, y, z + 10 ) );
32
  }
33
}


Добавлено 02-06-2012 в 17:05:

Всё, я зделал, ждите тутора


Отправлено Дядя Миша 02-06-2012 в 14:12:

Цитата:
ONeiLL писал:
А что такое NAN ???

Общеизвестно, что в отличие от целых чисел, числа с плавающей точкой имеют особый внутренний формат хранения. Подробнее см. здесь. Формат этот поддерживается как программно, так и аппаратно, начиная, примерно с 386-процессора. В те времена сопроцессор устанавливался на плату отдельно (и кстати стоил дороже процессора, зараза такая. Хотя на тройках он был зачастую впаян прямо в плату). Легко догадаться что раз есть определенный формат, то завсегда существует некая комбинация, недопустимая для данного формата, в рамках соглашения. Этой комбинацией и является NAN. NAN - это абббревеатурко такое, Not A Number, т.е. - не число.
Обычно возникает, когда переменные забыли проинициализировать и туда записался разный мусор. NAN на самом деле очень серъезная проблема и вот как раз и приводит к зависанию.

Добавлено 02-06-2012 в 18:12:

Вот кстати про NAN.

__________________
My Projects: download page

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

Цитата:

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


Отправлено ONeiLL 02-06-2012 в 14:13:

Ооо, буду знать
Вот скрин:


Отправлено Дядя Миша 02-06-2012 в 14:19:

ONeiLL ты всё-таки неполенись, скачай Q2 Evolved и зацени ватерсплешы там.

__________________
My Projects: download page

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

Цитата:

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


Отправлено ONeiLL 02-06-2012 в 15:27:

ок, на днях скачаю

Добавлено 02-06-2012 в 18:27:

http://hlfx.ru/forum/showthread.php...99663#post99663
Это тутор


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

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