Muzzle Flash Lighting:de

From Valve Developer Community
Jump to: navigation, search
English Русский

Dieses Tutorial zeigt, wie du ein Mündungsfeuer wie in "Counter Strike: Source" erzeugts, welches dynamisch auftaucht und die Umgebung beleuchtet. Diese Art von Licht wird "dlights" genannt.

Dieser Code wurde für eine Orange Box basierte Modifikation entwurfen, Singleplayer oder Multiplayer. Es funktioniert ebenfalls mit NPCs, vorausgesetzt, sie funktionieren.

Achtung:
Manche dynamischen Props werden nicht durch dlights beleuchtet.
Achtung:
Zu viele dlights könnten schwere Performanceprobleme auf Low-End Geräten verursachen. Wenn für Beleuchtung entwickelt wird, sollten dlights spärlich benutzt werden.
Note: From Slam12f, even better if you can write a console command to enable or disable dlights. Is easy to implement with help use static ConVar.

Dlight-basiertes Mündungsfeuer implementieren

Der code beginnt! Nur ein paar kleine Änderungen sind notwendig, um das Mündingsfeuer besser als je zuvor aussehen zu lassen.

Öffne als erstes c_baseanimating.cpp und suche nach der Funktion void C_BaseAnimating::ProcessMuzzleFlashEvent()

Vector vAttachment;
QAngle dummyAngles;
GetAttachment( attachment, vAttachment, dummyAngles );

// Ein elight erstellen
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;

Wie du vielleicht bemerkt hast, wurde Valve hier ein wenig verrückt und das ergebnis war ein scheinbar hässliches Mündungsfeuer. Dieses Tutorial dreht sich darum, Dinge hübscher zu machen, also werden wir das ändern. Ersetze die Einträge oben mit diesen:

			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 = 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;

Nachtrag: Der Farbcode wurde verändert. Standardmäßig war es auf eine Magenta-nahe Farbe gesetzt, aber ein gutes Mündungsfeuer ist näher an weiß. Du kannst 252, 238, 128 für ein realistisch ausgewaschenes Geld probieren.

Bemerkungen

Ich arbeite derzeit an dieser Idee weiter. Das Update wird visuellere Effekte zu dieser Idee hinzufügen, um ein realistischeres und saubereres Aussehen des Mündungsfeuers zu erzeugen. Das Update wird nur in der Orange Box Version der Engine funktionieren. Ein Link wird HIER (oder auf der originalen Seite) zur Verfügung gestellt, wenn das neue Mündungsfeuer fertig ist.

EINE ANMERKUNG VON GAMERMAN12: Ich habe den Code angepasst, damit die Lichter nach dem Feuern zerfallen, damit es einen Blitzeffekt beim Feuern mit Maschinengewehren gibt. Und es verblasst, damit es etwas realistischer ist. Danke.

Episode 2 Fix

Wenn du einen Fehler (error C2065: 'Attachment' : undeclared identifier) während des Bauens erhälst, probiere stattdessen folgendes:

			Vector vAttachment, vAng;
			QAngle angles;
			GetAttachment( 1, vAttachment, angles ); // 1 statt "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;