nach dem ich gestern Dank der Hilfe dieses Forums meine grundlegenden Verständnisprobleme lösen konnte, hänge ich jetzt an technischen Details fest.
Mein Problem: ich habe ein 3D-Modell, welches mit Normals daherkommt. Wenn ich dieses in einen entsprechenden Viewer lade, dann ist das Ergebnis so, wie ich das erwarten würde:
Das sieht gut aus, die Normals in dem Modell scheinen also nicht kaputt zu sein.
Mache ich das selbe mit meiner Applikation, dann ist das Ergebnis noch echt mies - und die ausgefransten Dreiecke lassen mich vermuten, dass das nicht nur an einer möglicherweise anderen Richung der Beleuchtung liegt:
Aktuell arbeite ich mit folgenden Shaderprogrammen:
Code: Alles auswählen
#version 130
in vec3 aPos;
in vec3 aNormal;
uniform mat4 inputTransform;
out vec3 Normal;
out vec3 fPos;
void main()
{
gl_Position=inputTransform*vec4(aPos,1.0);
Normal=aNormal;
fPos=vec3(inputTransform*vec4(aPos,1.0));
}\0
"fPos" reicht die transformierten Vektordaten ebenfalls weiter an den Framgentshader:
Code: Alles auswählen
#version 130
uniform vec4 inputColor;
in vec3 Normal;
in vec3 fPos;
out vec4 FragColor;
const vec3 lightPos = vec3(0.0,0.0,5.0);
const vec3 specColor = vec3(1.0,1.0,1.0);
void main()
{
vec3 normal = normalize(Normal);
vec3 viewDir = normalize(-fPos);
if (dot(normal,viewDir)<0.0) normal*=-1.0;
vec3 lightDir = normalize(lightPos - fPos);
float lamb = max(dot(lightDir, normal), 0.0);
float spec = 0.0;
if (lamb > 0.0)
{
vec3 refDir = reflect(-lightDir, normal);
float specAngle = max(dot(refDir, viewDir), 0.0);
spec = pow(specAngle, 4.0);
}\n"
FragColor=inputColor+vec4(spec*specColor,1.0);
}\0
"inputColour" erlaubt es, die Farbe des Modells von außen zu ändern. Die Position der Lichtquelle ist mit "lightPos" fix vorgegeben, ebenso wie "specColor".
Meine Frage: woran könnte das liegen? Irgend welche Hinweise, an welcher Stelle mein Problem liegen könnte?
Danke!