Ich versuche einen schwarz-weiß-Shader zu programmieren. Ich hätte dafür einen Pixelshader genommen und ihn folgendermaßen aufgebaut:
|
HLSL-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
sampler RT : register(s0);
float4 main_fp(
float2 texCoord : TEXCOORD0
) : COLOR
{
float3 sourceColor = tex2D(RT, texCoord).rgb;
float temp = max(sourceColor[0],sourceColor[1]);
float maxi = max(temp,sourceColor[2]);
// Ich habe mir GEdanken gemacht, dass man das V von HSV oder das L von HSL nehmen könnte. Allerdings bin ich mir nicht sicher
return float4(maxi,maxi,maxi,1.0f);
//oder
temp = min(sourceColor[0],sourceColor[1]);
float mini = min(temp,sourceColor[2]);
float res = (maxi+mini)/2;
return float4(res,res,res,1.0f)
}
|
Meine Überlegung war, dass es nur einen Wert gibt. Da wenn alle Werte gleich sind die Farbe schwarz/weiß/grau ist denke ich man kann es so lösen.
Allerdings weiß ich nicht ob ich die relative Helligkeit oder den Hellwert der Farbe brauche.