Ru/Muzzle Flash Lighting: Difference between revisions
No edit summary |
m (obsolete language category) |
||
(4 intermediate revisions by 4 users not shown) | |||
Line 1: | Line 1: | ||
{{ | {{lang|title=Вспышка от выстрелов|Muzzle Flash Lighting}} | ||
|title=Вспышка от выстрелов | |||
| | |||
}} | |||
Этот урок покажет вам, как создать muzzleflash которая динамически появляется и освещает всё вокруг вас, как в Counter-Strike: Source. Такие огни называются "dlights". | Этот урок покажет вам, как создать muzzleflash которая динамически появляется и освещает всё вокруг вас, как в Counter-Strike: Source. Такие огни называются "dlights". | ||
Line 33: | Line 30: | ||
el->color.exponent = 5; | el->color.exponent = 5; | ||
</source> | </source> | ||
Как вы, возможно, заметили, Valve пошли немного | Как вы, возможно, заметили, Valve пошли немного сумасшедшим путём, и результатом оказались уродливые muzzleflash. Этот урок покажет как сделать всё красиво, так что мы изменим этот код. Замените записи выше вот этим: | ||
<source lang=cpp> | <source lang=cpp> | ||
Vector vAttachment, vAng; | Vector vAttachment, vAng; | ||
Line 81: | Line 78: | ||
Перевод --[[User:Slam12f|Slam12f]] 03:39, 13 May 2013 (PDT) | Перевод --[[User:Slam12f|Slam12f]] 03:39, 13 May 2013 (PDT) | ||
{{ACategory|Weapons programming}} |
Latest revision as of 03:53, 22 August 2024
Этот урок покажет вам, как создать muzzleflash которая динамически появляется и освещает всё вокруг вас, как в Counter-Strike: Source. Такие огни называются "dlights".
Этот код был разработан для любого мода на основе Orange Box, будь то сингл или мультиплеер. Также это работает с NPC, при условии, что вы сделаете работу кода.



Реализация Dlight как Muzzleflashes
Начинаем программировать! Только несколько незначительных изменений необходимо сделать, чтобы muzzleflashes выглядел гораздо лучше.
Прежде всего откройте, c_baseanimating.cpp и найдите в функции эти строки void C_BaseAnimating::ProcessMuzzleFlashEvent()
Vector vAttachment;
QAngle dummyAngles;
GetAttachment( attachment, vAttachment, dummyAngles );
// Make an elight
dlight_t *el = effects->CL_AllocElight( LIGHT_INDEX_MUZZLEFLASH + index );
el->origin = vAttachment;
el->radius = random->RandomInt( 32, 64 );
el->decay = el->radius / 0.05f;
el->die = gpGlobals->curtime + 0.05f;
el->color.r = 255;
el->color.g = 192;
el->color.b = 64;
el->color.exponent = 5;
Как вы, возможно, заметили, Valve пошли немного сумасшедшим путём, и результатом оказались уродливые muzzleflash. Этот урок покажет как сделать всё красиво, так что мы изменим этот код. Замените записи выше вот этим:
Vector vAttachment, vAng;
QAngle angles;
GetAttachment( attachment, vAttachment, angles );
AngleVectors( angles, &vAng );
vAttachment += vAng * 2;
dlight_t *dl = effects->CL_AllocDlight ( index );
dl->origin = vAttachment;
dl->color.r = 252;
dl->color.g = 248;
dl->color.b = 128;
dl->die = gpGlobals->curtime + 0.05f;
dl->radius = random->RandomFloat( 245.0f, 256.0f );
dl->decay = 512.0f;
Примечание
Сейчас я работаю дальше, и обновления добавят больше визуальных эффектов, чтобы создать более реалистичный и чистый взгляд на вспышку. Обновление будет работать только на Orange Box Engine. Когда я сделаю что-то новое для muzzleflash, я размещу это здесь.
Примечание от GAMERMAN12: Я обновил этот код, чтобы свет распадался после выстрела, т.к. есть эффект мигания при стрельбе из пулеметов. И она исчезает так, чтобы dlitle бфл более реалистичным. Спасибо.
Episode 2 Исправление
Если при компиляции вылезла ошибка (error C2065: 'Attachment' : undeclared identifier) замените код на вот этот:
Vector vAttachment, vAng;
QAngle angles;
GetAttachment( 1, vAttachment, angles ); // устанавливаем 1 вместо "attachment"
AngleVectors( angles, &vAng );
vAttachment += vAng * 2;
dlight_t *dl = effects->CL_AllocDlight ( index );
dl->origin = vAttachment;
dl->color.r = 231;
dl->color.g = 219;
dl->color.b = 14;
dl->die = gpGlobals->curtime + 0.05f;
dl->radius = random->RandomFloat( 245.0f, 256.0f );
dl->decay = 512.0f;
Перевод --Slam12f 03:39, 13 May 2013 (PDT)