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

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

Рейтинг



Вопрос насчет 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
Проживает: Зеленый форум
Сообщений: 8640
Возраст: 26

Рейтинг



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

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

__________________
Для организации коллектива надо уметь ссать в уши виртуозно (с) Raid

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

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

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

Рейтинг



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

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

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

Группа: Неопытный
Дата регистрации: May 2016
Проживает: Москва
Сообщений: 164
Возраст: 20

Рейтинг



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

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

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

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

Рейтинг



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

__________________
В действительности всё может оказаться иначе, чем оно есть на самом деле

My Projects: download page

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

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

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

Рейтинг



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

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

Старое сообщение 29-03-2018 15:14
- За что?
Ku2zoff
Юзер (типа моддер)

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

Рейтинг



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)
Сообщений: 1397

Рейтинг



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

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

C++ Source Code:
class CBlasterRing : public CObject
{
public:
    // construction
    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 );
    ~CBlasterRing() {gEngfuncs.Con_Printf("deleting puff\n");};
    int Draw( float time, float frametime );
    
    HL_HSPRITE spr;
    
    vec3_t    RingOrigin;
    vec3_t    RingNormal;
    float    RingSize;
    
    float m_fAlpha;
    float m_fLife;
    
    float m_fr, m_fg, m_fb;
};

CBlasterRing::CBlasterRing( vec3_t origin, vec3_t normal, float life, float alpha, float size, char model [64], 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(model);
    
    VectorCopy((origin + normal * 1), RingOrigin);
    VectorCopy(normal, RingNormal);
    RingSize = size;
}

int CBlasterRing::Draw(float time, float frametime)
{
    float frac = (time - birthTime) / m_fLife;
    if (frac > 1)
        return 1; // delete object
    
    if (!spr)
    {
        gEngfuncs.Con_Printf("error: cant load sprite \n");
        return 1;
    }
    
    CalcViewMatrix();
    
    float size = RingSize * frac;
    
    vec3_t forward, right, up, vertex;
    MakeUpRight(RingNormal, up, right);
    
    struct model_s *pModel = (struct model_s *)gEngfuncs.GetSpritePointer( spr );
    gEngfuncs.pTriAPI->RenderMode(kRenderTransAdd);
    gEngfuncs.pTriAPI->SpriteTexture( pModel, 0 );
    float alpha = m_fAlpha - frac;
    gEngfuncs.pTriAPI->Color4f( m_fr, m_fg, m_fb, alpha );
    gEngfuncs.pTriAPI->CullFace( TRI_NONE );
    
    gEngfuncs.pTriAPI->Begin( TRI_QUADS );
    
    gEngfuncs.pTriAPI->TexCoord2f( 0, 0 );
    vertex = RingOrigin - ( up + right ) * size;
    gEngfuncs.pTriAPI->Vertex3f( vertex.x, vertex.y, vertex.z );
    
    gEngfuncs.pTriAPI->TexCoord2f( 1, 0 );
    vertex = RingOrigin + ( right - up ) * size;
    gEngfuncs.pTriAPI->Vertex3f( vertex.x, vertex.y, vertex.z );
    
    gEngfuncs.pTriAPI->TexCoord2f( 1, 1 );
    vertex = RingOrigin + ( right + up ) * size;
    gEngfuncs.pTriAPI->Vertex3f( vertex.x, vertex.y, vertex.z );
    
    gEngfuncs.pTriAPI->TexCoord2f( 0, 1 );
    vertex = RingOrigin + ( up - right ) * size;
    gEngfuncs.pTriAPI->Vertex3f( vertex.x, vertex.y, vertex.z );
    
    
    gEngfuncs.pTriAPI->End();
    gEngfuncs.pTriAPI->RenderMode(kRenderNormal);
    
    return 0;
}

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

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

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

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

Рейтинг



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

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

__________________
В действительности всё может оказаться иначе, чем оно есть на самом деле

My Projects: download page

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

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

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

Рейтинг



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

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

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

Дата регистрации: Oct 2005
Проживает: (void)
Сообщений: 3124
Нанёс повреждений: 0 ед.

Рейтинг



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


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

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

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

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

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

Рейтинг



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

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

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

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

Рейтинг



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

UTIL_VecToAngles

__________________
В действительности всё может оказаться иначе, чем оно есть на самом деле

My Projects: download page

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

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

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

Рейтинг



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

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

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

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

Рейтинг



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

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

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



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


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

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

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

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

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

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

Рейтинг@Mail.ru