2012-03-25 11 views
1

Ich erstelle eine Nebel-Funktion in meiner Effekt-Datei. Im Pixel-Shader berechne ich den Abstand von der Kameraposition und der Eingabeposition :C#/HLSL & XNA - Mischen von 2 Farben per Prozent in HLSL

float x = distance(_in.pos3d, CameraPosition); 
float fd; 
if(Fog) 
{ 
    if(x > FogDistance) 
     fd = ((x-FogDistance) * FogIntensity > 100) ? 100 : ((x-FogDistance) * FogIntensity); 
    //_in.color = ???; 
} 

wo: x der Abstand von der Kameraposition und Vertex-Position ist, fd der Prozentsatz der Nebelfarbe ist, ist FogDistance der Abstand, in dem Objekt nicht durch Nebel beeinträchtigt werden, und FogIntensity ist wie intensiv der Nebel ist.

Was ich versuche zu bekommen, ist eine Farbe, die (fd%) der Nebelfarbe enthält. Zum Beispiel, wenn die Nebelfarbe orange war, war die Eingabe weiß, und fd war 25%, die erzeugte Farbe wäre weiß + 25% orange.

EDIT: Übrigens, Entschuldigung für die nicht wartbare Einstellungscode.

BEARBEITEN 2: Ich habe festgestellt, dass zwei durchsichtige Schichten ein transparentes Ergebnis haben, also habe ich die Frage etwas aufgeräumt. Für die Scheitelpunkteingabe gibt es keinen Prozentsatz.

Antwort

2

Sie wollen die lerp Funktion (MSDN). Das ist die Funktion "lineare Interpolation".

Farben in Pixelshadern sind im Wesentlichen die gleichen wie Vektoren, so dass Sie beliebige Vektorfunktionen darauf verwenden können.

Anstatt einen Prozentsatz (im Bereich von 0 bis 100), die lerp Funktion nimmt einen Wert zwischen 0 und 1

So Ihr Code wahrscheinlich in etwa wie folgt aussehen:

_in.color = lerp(_in.color, someOtherColor, fogAmount);