Ich konvertiere ein Shadertoy in ein lokales Three.js-Projekt und kann es nicht zum Rendern bringen. Sie können die full snippet hier ausprobieren.Konvertieren und Verwenden von Shadertoys iResolution-Variable in einem Three.js-Skript
Ich denke, dass das Problem darin liegen kann, wie ich die iResolution
Variable umwandle. Wie ich es verstehe, enthält die integrierte Shadertoy-globale Variable iResolution
die Pixelmaße des Fensters. Hier ist, wie iResolution
im original Shadertoy verwendet wird:
vec2 uv = fragCoord.xy/iResolution.y;
vec2 ak = abs(fragCoord.xy/iResolution.xy-0.5);
Bei der Umwandlung dieses Shadertoy in eine lokale Three.js-basierte Skript habe ich versucht, zwei Ansätze zur Umwandlung iResolution
:
1) das Fenster Laden Dimensionen als Vector2 und sie in den Shader als einheitliche Senden vec2 uResolution
:
vec2 uv = gl_FragCoord.xy/uResolution.y;
vec2 ak = abs(gl_FragCoord.xy/uResolution.xy-0.5);
Diese Lösung klebt am nächsten an die den ign der original Shadertoy, aber leider nichts rendert.
2) Der zweite Ansatz kommt aus dieser SO Answer und wandelt die uv
-xy
absoluten Koordinaten Koordinaten:
vec2 uvCustom = -1.0 + 2.0 *vUv;
vec2 ak = abs(gl_FragCoord.xy/uvCustom.xy-0.5);
In diesem, ich gebe zu, ich nicht vollständig verstehen, wie es funktioniert, und meine Verwendung der uvCustom
in der zweiten Zeile möglicherweise nicht korrekt.
Am Ende nichts rendert auf dem Bildschirm außer einem Three.js CameraHelper ich benutze. Ansonsten ist der Bildschirm schwarz und die Konsole zeigt keine Fehler für das Javascript oder WebGL. Danke für einen Blick!
Kannst du eine JS Geige machen, die geändert werden kann? – pailhead
Ändern Sie Ihren Shader in nur 'void main() {gl_FragColor = vec4 (1,0,0,1); } '. Siehst du rot? Wenn nicht, hat das Problem nichts mit Ihrem Fragment-Shader zu tun. – gman