Ich versuche, meinen Shader zu schreiben und Lichtquellen hinzuzufügen, ich habe es irgendwie herausgefunden und es getan.Three.js shader pointLight position
Aber es gibt ein Problem, die Position der Lichtquelle ist falsch bestimmt, wenn sich die Kamera dreht oder bewegt, geschieht etwas unvorstellbares.
So bekomme ich die Position des Vertex-Shader
vec3 vGlobalPosition = (modelMatrix * vec4(position, 1.0)).xyz
Jetzt versuche ich, eine beleuchtete Fläche
float lightDistance = pointLights[ i ].distance;
vec3 lightPosition = pointLights[ i ].position;
float diffuseCoefficient = max(
1.0 - (distance(lightPosition,vGlobalPosition)/lightDistance), 0.0);
gl_FragColor.rgb += color.rgb * diffuseCoefficient;
zu machen Aber wie ich bereits schrieb, wenn Sie die Kamera drehen, die Beleuchtung Bereich bewegt sich zu verschiedenen Positionen.
Ich legte die Lichtposition manuell und alles wurde normal.
vec3 lightPosition = vec3(2000,0,2000);
...
Die Frage ist, wie man die richtige Position der Lichtquelle erhält? Ich brauche eine globale Position, welche Position in der Lichtquelle steckt, die ich nicht kenne.
Hinzugefügt ein Beispiel: http://codepen.io/korner/pen/XMzEaG
Können Sie eine Geige oder einen Codepen machen, der das Problem demonstriert? – gromiczek
@gromiczek, bitte fragen Sie nicht Leute, Codepen oder Jsfiddle zu verwenden. ** Setzen Sie den Code in die Frage selbst. Verwenden Sie [ein Snippet] (https://stackoverflow.blog/2014/09/16/introducing-runnable-javascript-css-and-html-code-snippets/), wenn es ausgeführt werden soll ** – gman
Ein Beispiel hinzugefügt: http://codepen.io/korner/pen/XMzEaG – user2783211