Ich habe einen grundlegenden Shader, der nur ein Fragment basierend auf einer Stichprobenattributfarbe darstellt. Die Schattierung wird jedoch auch bei eingeschaltetem gl_Smooth als blocky/flat angezeigt. Ich verstehe Gourad und Phong, wenn es um eine Augenposition und ein Licht geht, aber ich versuche, eine diffuse Schattierung mit nur "Umgebungslicht" zu erreichen; Vielmehr treten die Lichtwerte als Teil der Farbe auf, wie sie mit realen Kameradaten erfasst werden. Meine Welt wird über die rgbd-Eingabe konstruiert und erzeugt sehr polygonisierte Netze (marschierende Würfel) mit abgetasteten Farben. Meine Frage ist, wie man die Schattierung pro Fragment glätten kann, wenn es keine direkte Lichtrichtung gibt. Ich habe meinen Shader so eingerichtet, dass Farben, Position und Normalen Vertex-Attribute sind.Selbstleuchtende diffuse Schattierung - interpolierende Normalen pro Fragment
Mein aktueller Shadern:
vert:
#version 330
uniform mat4 ProjectionModelView;
layout(location = 0) in vec3 Position;
layout(location = 1) in vec3 Color;
layout(location = 1) in vec3 Normal;
out vec3 VertexPosition;
out vec3 VertexColor;
out vec3 VertexNormal;
void main(void)
{
VertexColor = Color;
VertexPosition = Position;
VertexNormal = Normal;
gl_Position = ProjectionModelView*vec4(Position, 1.0);
}
Fragment
#version 330
in vec3 VertexPosition;
in vec3 VertexColor;
in vec3 VertexNormal;
out vec4 FinalColor;
void main(void)
{
float intensity = dot(VertexPosition, VertexNormal);
FinalColor = vec4(VertexColor.x, VertexColor.y, VertexColor.z, 1)*intensity;
}
Und als Referenz, das Drahtgitter, das ist ziemlich hoch Dreieck Zahl :
Mit Normalen gemacht:
Und mit nur der Rendering pro Vertex Farbe ohne Modifikationen:
Ah !! Ich denke, ich verstehe, dass ich den Vektor von der Kamera zur Oberfläche bringen muss ... Ich muss die Intensität eingrenzen, da ich nur "falsche" Beleuchtung oder eher vorberechnete Beleuchtung habe –