HLFX.Ru Forum
профиль •  правила •  регистрация •  календарь •  народ •  FAQ •  поиск •  новое •  сутки •  главная •  выход  
HLFX.Ru Forum HLFX.Ru Forum > Теория и практика > Half-Life SDK > Нубские вопросы от <censored> и других нубов
Чтобы не создавать сто тем
7 голосов
Страницы (260): « Первая ... « 102 103 104 105 [106] 107 108 109 110 » ... Последняя »   Предыдущая тема   Следующая тема
Автор
Тема Новая тема    Ответить
Chyvachok
Житель форума

Дата регистрации: Jul 2011
Проживает: (void)
Сообщений: 1844

Рейтинг



Вопрос насчет TriApi, допустим у меня есть эффект дымка от стен CSmokePuff из паранои, я хочу как-то переделать его чтобы он рисовал круги при попадании на стены, я пытаюсь в общем повторить эффект бластера из GunMan Chronicles, там при попадании в стену помимо спрайта попадания еще рисуются "кольца" на стене, я вот пытаюсь эти кольца как-то воссоздать. В общем как мне сделать чтобы спрайт не "смотрел" на игрока, а от стены? Я не нашел как это сделать. И как можно сделать чтобы можно было указать свой спрайт? А то у меня с этим тоже проблемы возникли. Вот код этого эффекта:

code:
//test blaster_effect CBlasterHit::CBlasterHit( vec3_t origin, vec3_t normal, float life, float alpha, float puffspeed, float puffsize, float maxofs, float r, float g, float b) { vec3_t up, right; VectorClear(right); VectorClear(up); MakeUpRight(normal, up, right); m_fAlpha = alpha; m_fLife = life; m_fr = r; m_fg = g; m_fb = b; spr = SPR_Load("sprites/blaster_puff.spr"); // gEngfuncs.Con_Printf("normal: %f, %f, %f\n", normal[0], normal[1], normal[2]); // gEngfuncs.Con_Printf("up vec: %f, %f, %f\n", up[0], up[1], up[2]); // gEngfuncs.Con_Printf("right vec: %f, %f, %f\n", right[0], right[1], right[2]); VectorCopy(origin, puff_origin); puff_size = puffsize; VectorClear(puff_velocity); VectorMA(puff_velocity, puffspeed, normal, puff_velocity); VectorMA(puff_velocity, gEngfuncs.pfnRandomFloat(-maxofs, maxofs), right, puff_velocity); VectorMA(puff_velocity, gEngfuncs.pfnRandomFloat(-maxofs, maxofs), up, puff_velocity); // gEngfuncs.Con_Printf("creating puff\n"); } int CBlasterHit::Draw(float time, float frametime) { float frac = (time - birthTime) / m_fLife; if (frac > 1) return 1; // delete object // HL_HSPRITE spr = SPR_Load("sprites/blasterpuff.spr"); // HL_HSPRITE spr2 = SPR_Load("sprites/blasterpoof.spr"); if (!spr) { gEngfuncs.Con_Printf("error: cant load sprite sprites/blasterpuff.spr\n"); return 1; } CalcViewMatrix(); struct model_s *pModel = (struct model_s *)gEngfuncs.GetSpritePointer( spr ); int frame = (int)(pModel->numframes * frac); gEngfuncs.pTriAPI->RenderMode(kRenderTransAdd); gEngfuncs.pTriAPI->SpriteTexture( pModel, frame ); gEngfuncs.pTriAPI->Color4f( m_fr, m_fg, m_fb, m_fAlpha ); gEngfuncs.pTriAPI->CullFace( TRI_NONE ); gEngfuncs.pTriAPI->Begin( TRI_QUADS ); float size = puff_size * frac; VectorMA(puff_origin, frametime, puff_velocity, puff_origin); g_viewMatrix[0][3] = puff_origin[0]; // write origin to matrix g_viewMatrix[1][3] = puff_origin[1]; g_viewMatrix[2][3] = puff_origin[2]; gEngfuncs.pTriAPI->TexCoord2f( 0, 0 ); SetPoint(0, size ,size, g_viewMatrix); gEngfuncs.pTriAPI->TexCoord2f( 0, 1 ); SetPoint(0, size ,-size, g_viewMatrix); gEngfuncs.pTriAPI->TexCoord2f( 1, 1 ); SetPoint(0, -size ,-size, g_viewMatrix); gEngfuncs.pTriAPI->TexCoord2f( 1, 0 ); SetPoint(0, -size ,size, g_viewMatrix); gEngfuncs.pTriAPI->End(); gEngfuncs.pTriAPI->RenderMode(kRenderNormal); return 0; } //.h файл: class CBlasterHit : public CObject { public: // construction CBlasterHit( vec3_t origin, vec3_t normal, float life, float alpha, float puffspeed, float puffsize, float maxofs, float r=1.0, float g=1.0, float b=1.0 ); ~CBlasterHit() {gEngfuncs.Con_Printf("deleting puff\n");}; int Draw( float time, float frametime ); HL_HSPRITE spr; vec3_t puff_origin; vec3_t puff_velocity; float puff_size; float m_fAlpha; float m_fLife; float m_fr, m_fg, m_fb; };


И вот что я пытаюсь сделать: https://imgur.com/a/DkmCW

Отредактировано Chyvachok 29-03-2018 в 11:59

Сообщить модератору | | IP: Записан
Сообщение: 172024

Старое сообщение 29-03-2018 11:56
- За что?
FiEctro
Кот Арсис

Дата регистрации: Aug 2006
Проживает: код
Сообщений: 12882
Возраст: 32

Рейтинг



>> как мне сделать чтобы спрайт не "смотрел" на игрока, а от стены?

Насколько я помню в БСП для каждой поверхности записана нормаль, собственно по ней и надо ориентировать твой спрайт

Сообщить модератору | | IP: Записан
Сообщение: 172025

Старое сообщение 29-03-2018 12:22
- За что?
Chyvachok
Житель форума

Дата регистрации: Jul 2011
Проживает: (void)
Сообщений: 1844

Рейтинг



FiEctro я имел ввиду отображение спрайта, можно ли его в коде указать, спрайты эффектов сами по себе всегда на игрока смотрят.

Сообщить модератору | | IP: Записан
Сообщение: 172026

Старое сообщение 29-03-2018 12:33
- За что?
a1batross
Житель форума

Дата регистрации: May 2016
Проживает: Москва
Сообщений: 516
Возраст: 26

Рейтинг



Chyvachok перекомпилять сам спрайт. Там есть опция ориентации.

Сообщить модератору | | IP: Записан
Сообщение: 172027

Старое сообщение 29-03-2018 13:16
- За что?
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 32188
Нанёс повреждений: 392 ед.

Рейтинг



Если спрайт рисуется через триапи эти настройки не учитываются

__________________
My Projects: download page

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

Цитата:

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

Сообщить модератору | | IP: Записан
Сообщение: 172028

Старое сообщение 29-03-2018 13:58
-
Chyvachok
Житель форума

Дата регистрации: Jul 2011
Проживает: (void)
Сообщений: 1844

Рейтинг



Дядя Миша а как тогда убрать это чтобы он не смотрел на игрока всегда?

Сообщить модератору | | IP: Записан
Сообщение: 172029

Старое сообщение 29-03-2018 15:14
- За что?
Ku2zoff
Мастер Ёда из Деревни Дуракоф

Дата регистрации: Apr 2007
Проживает: В Деревне дураков
Сообщений: 6749
Возраст: 33

Рейтинг



Chyvachok есть 2D триапи (рисуется всегда повёрнутым к игроку, например спрайты над бошками тиммейтов в DoD) и есть 3D триапи (огонёк зажигалки в Инвазионе). Вот, используй 3D-вариант. Он, кстати, и в софтваре тоже работает.
gEngfuncs.pTriAPI->TexCoord2f это для 2D, используй gEngfuncs.pTriAPI->Vertex3f для 3D координат.

Отредактировано Ku2zoff 29-03-2018 в 15:20

Сообщить модератору | | IP: Записан
Сообщение: 172030

Старое сообщение 29-03-2018 15:19
- За что?
Chyvachok
Житель форума

Дата регистрации: Jul 2011
Проживает: (void)
Сообщений: 1844

Рейтинг



Ku2zoff спасибо за подсказку, посмотрел в коде инвазиона, что-то там скопировал, и каким-то чудом вроде стало работать как надо, хотя код с этими gEngfuncs.pTriAPI там был очень похож, что вышло: https://imgur.com/a/ICAiS

Вот кстати код, интересно, насколько он нормальный? Может какие моменты можно улучшить?

C++ Source Code:
1
class CBlasterRing : public CObject
2
{
3
public:
4
  // construction
5
  CBlasterRing( vec3_t origin, vec3_t normal, float life, float alpha, float size, char model [64], float r=1.0, float g=1.0, float b=1.0 );
6
  ~CBlasterRing() {gEngfuncs.Con_Printf("deleting puff\n");};
7
  int Draw( float time, float frametime );
8
 
9
  HL_HSPRITE spr;
10
 
11
  vec3_t	RingOrigin;
12
  vec3_t	RingNormal;
13
  float	RingSize;
14
 
15
  float m_fAlpha;
16
  float m_fLife;
17
 
18
  float m_fr, m_fg, m_fb;
19
};
20
 
21
CBlasterRing::CBlasterRing( vec3_t origin, vec3_t normal, float life, float alpha, float size, char model [64], float r, float g, float b)
22
{
23
  vec3_t up, right;
24
  VectorClear(right);
25
  VectorClear(up);
26
  MakeUpRight(normal, up, right);
27
  m_fAlpha = alpha;
28
  m_fLife = life;
29
  m_fr = r; m_fg = g; m_fb = b;
30
 
31
  spr = SPR_Load(model);
32
 
33
  VectorCopy((origin + normal * 1), RingOrigin);
34
  VectorCopy(normal, RingNormal);
35
  RingSize = size;
36
}
37
 
38
int CBlasterRing::Draw(float time, float frametime)
39
{
40
  float frac = (time - birthTime) / m_fLife;
41
  if (frac > 1)
42
    return 1; // delete object
43
 
44
  if (!spr)
45
  {
46
    gEngfuncs.Con_Printf("error: cant load sprite \n");
47
    return 1;
48
  }
49
 
50
  CalcViewMatrix();
51
 
52
  float size = RingSize * frac;
53
 
54
  vec3_t forward, right, up, vertex;
55
  MakeUpRight(RingNormal, up, right);
56
 
57
  struct model_s *pModel = (struct model_s *)gEngfuncs.GetSpritePointer( spr );
58
  gEngfuncs.pTriAPI->RenderMode(kRenderTransAdd);
59
  gEngfuncs.pTriAPI->SpriteTexture( pModel, 0 );
60
  float alpha = m_fAlpha - frac;
61
  gEngfuncs.pTriAPI->Color4f( m_fr, m_fg, m_fb, alpha );
62
  gEngfuncs.pTriAPI->CullFace( TRI_NONE );
63
 
64
  gEngfuncs.pTriAPI->Begin( TRI_QUADS );
65
 
66
  gEngfuncs.pTriAPI->TexCoord2f( 0, 0 );
67
  vertex = RingOrigin - ( up + right ) * size;
68
  gEngfuncs.pTriAPI->Vertex3f( vertex.x, vertex.y, vertex.z );
69
 
70
  gEngfuncs.pTriAPI->TexCoord2f( 1, 0 );
71
  vertex = RingOrigin + ( right - up ) * size;
72
  gEngfuncs.pTriAPI->Vertex3f( vertex.x, vertex.y, vertex.z );
73
 
74
  gEngfuncs.pTriAPI->TexCoord2f( 1, 1 );
75
  vertex = RingOrigin + ( right + up ) * size;
76
  gEngfuncs.pTriAPI->Vertex3f( vertex.x, vertex.y, vertex.z );
77
 
78
  gEngfuncs.pTriAPI->TexCoord2f( 0, 1 );
79
  vertex = RingOrigin + ( up - right ) * size;
80
  gEngfuncs.pTriAPI->Vertex3f( vertex.x, vertex.y, vertex.z );
81
 
82
 
83
  gEngfuncs.pTriAPI->End();
84
  gEngfuncs.pTriAPI->RenderMode(kRenderNormal);
85
 
86
  return 0;
87
}

Отредактировано Chyvachok 29-03-2018 в 17:03

Сообщить модератору | | IP: Записан
Сообщение: 172031

Старое сообщение 29-03-2018 16:56
- За что?
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 32188
Нанёс повреждений: 392 ед.

Рейтинг



Цитата:
Chyvachok писал:
как тогда убрать это чтобы он не смотрел на игрока всегда?

ДА НЕ КАК!!!!!111

__________________
My Projects: download page

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

Цитата:

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

Сообщить модератору | | IP: Записан
Сообщение: 172032

Старое сообщение 29-03-2018 17:53
-
Chyvachok
Житель форума

Дата регистрации: Jul 2011
Проживает: (void)
Сообщений: 1844

Рейтинг



Вопрос по векторам и углам, а как развернуть объект по tr.vecPlaneNormal?
Допустим я хочу чтобы обьект который липнет к стене еще рандомно разворачивался относительно этой стены, я то я заюзал StickyGibсы, и в глаза бросается что они одинаково к поверхности клеються.

Сообщить модератору | | IP: Записан
Сообщение: 172033

Старое сообщение 30-03-2018 16:18
- За что?
~ X ~
offline

Дата регистрации: Oct 2005
Проживает: Архангельск
Сообщений: 3619

Рейтинг



Награды
 
[1 награда]


Chyvachok CTripmineGrenade...
Хотя, если честно, AlignToFloor() у меня до сих пор в TODO.

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

Сообщить модератору | | IP: Записан
Сообщение: 172035

Старое сообщение 30-03-2018 17:57
- За что?
Chyvachok
Житель форума

Дата регистрации: Jul 2011
Проживает: (void)
Сообщений: 1844

Рейтинг



~ X ~ ну они и так к стене разворачиваются на подобии трипмины, мина она всегда прямо лепиться, не боком там или еще как-то, я имел ввиду их еще для рандома покрутить относительно стены, чтобы одинаковость формы моделей не так в глаза бросалась, но я вот не знаю как бы именно покрутить относительно этой tr.vecPlaneNormal, а не мира.

Сообщить модератору | | IP: Записан
Сообщение: 172036

Старое сообщение 30-03-2018 18:14
- За что?
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 32188
Нанёс повреждений: 392 ед.

Рейтинг



Цитата:
Chyvachok писал:
но я вот не знаю как бы именно покрутить относительно этой tr.vecPlaneNormal, а не мира.

UTIL_VecToAngles

__________________
My Projects: download page

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

Цитата:

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

Сообщить модератору | | IP: Записан
Сообщение: 172038

Старое сообщение 30-03-2018 18:48
-
Chyvachok
Житель форума

Дата регистрации: Jul 2011
Проживает: (void)
Сообщений: 1844

Рейтинг



Посмотрел у стрелы арбалета, оказываеться добавить pev->angles.z = RANDOM_LONG(0,360); было достаточно, я думал что оно крутить будет относительно мира, а стены. Заодно попробовал ретекстурить эти stickygib-ы: https://imgur.com/a/PXTCT

Сообщить модератору | | IP: Записан
Сообщение: 172040

Старое сообщение 30-03-2018 20:02
- За что?
Garux
Частый гость

Дата регистрации: Mar 2015
Проживает: Металлострой
Сообщений: 98

Рейтинг



Chyvachok, крутота! кишки можно по стенам размазывать

Сообщить модератору | | IP: Записан
Сообщение: 172043

Старое сообщение 31-03-2018 19:46
- За что?
Тема: (Опционально)
Ваш ответ:



Переводчик транслита


[проверить длину сообщения]
Опции: Автоматическое формирование ссылок: автоматически добавлять [url] и [/url] вокруг интернет адресов.
Уведомление по E-Mail: отправить вам уведомление, если кто-то ответил в тему (только для зарегистрированных пользователей).
Отключить смайлики в сообщении: не преобразовывать текстовые смайлики в картинки.
Показать подпись: добавить вашу подпись в конец сообщения (только зарегистрированные пользователи могут иметь подписи).

Временная зона GMT. Текущее время 23:02. Новая тема    Ответить
Страницы (260): « Первая ... « 102 103 104 105 [106] 107 108 109 110 » ... Последняя »   Предыдущая тема   Следующая тема
HLFX.Ru Forum HLFX.Ru Forum > Теория и практика > Half-Life SDK > Нубские вопросы от <censored> и других нубов
Чтобы не создавать сто тем
7 голосов
Версия для печати | Отправить тему по E-Mail | Подписаться на эту тему

Быстрый переход:
Оцените эту тему:

Правила Форума:
Вы not можете создавать новые темы
Вы not можете отвечать в темы
Вы not можете прикреплять вложения
Вы not можете редактировать ваши сообщения
HTML Код ВЫКЛ
vB Код ВКЛ
Смайлики ВКЛ
[IMG] Код ВКЛ
 

< Обратная связь - HLFX.ru >

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