Das ist wohl GLSL, das kann ich nicht wirklich lesen.
Aber allgemein:
dot, also das Punktprodukt, liefert dir ja den Kosinus zwischen den Vektoren (wenn sie wie bei dir normalisiert sind)
Wenn die also in die gleiche Richtung zeigen (Winkel = 0 Grad), kriegst du eine 1,
wenn der Winkel zwischen den beiden 90 Grad ist, eine 0 und
wenn sie in die entgegengesetzte Richtung zeigen (Winkel = 180 Grad) eine -1.
Ich schätze mal, du willst den rot Anteil = 1 haben, wenn du genau von oben auf die Fläche guckst, und rot = 0, wenn du seitlich drauf guckst.
Dann müsstest du schreiben (wenn view die Richtung ist, in die die Kamera guckt (Achtung es muss die Richtung sein und nicht die Viewing Position) ):
gl_FragColor = vec4(-1.0 * dot(view, normal), 0.0, 0.0, 1.0);
Dann hättest du allerdings für rot einen negativen Wert, wenn du von hinten auf die Fläche guckst (also der Winkel zwischen Blickrichtung und Normale zwischen 0 und 90 Grad ist), aber das sollte ja egal sein, ansonsten könntest du z.B. den absolut Wert vom Punktprodukt benutzen (wenn die Fläche auch von hinten gerendert werden soll): abs(dot(view, normal))
Da fällt mir gerade auf, du berechnest dot im Fragment Shader. Das beseitigt zumindest bei mir alle Klarheiten. Trotzdem was ich grad geschrieben habe, stimmt schon mal, vielleicht hilfts ja.
|