Senden von JavaScript-Variablen an den Fragment-Shader

8

Ich habe Online-Beispiele zusammengefügt, um einen Mandelbrot-Set-Fragment-Shader zu erstellen. Der Vertex-Shader macht im Grunde nichts, er weist gl_Position zu, und der Fragment-Shader berechnet etwas, um das Bild zu berechnen.

Allerdings habe ich eine Anzahl von #define s, die ich durch JavaScript-gesteuerte Variablen ersetzen möchte, und ich weiß nicht, wie ich das machen soll. Wenn ein Beispiel gezeigt werden könnte, wie man #define MAX_ITERATIONS 200 durch eine JavaScript zugewiesene Variable im folgenden Code ersetzt, könnte ich wahrscheinlich den Rest von ihnen herausfinden. Ich glaube, dass ich ein uniform oder varying spezifizieren muss, bin aber nicht sicher, wie man die Kommunikation von JavaScript zu GLSL verwaltet.

Ich verstehe auch nicht, wie aPosition zwischen JavaScript und dem Vertex-Shader funktioniert, was ich habe, ist im Grunde dasselbe wie in den Beispielen.

JavaScript , ich könnte mir vorstellen, dass nur init() wichtig für SO-Leser ist, der Rest wird bei Bedarf gepostet:

%Vor%

Vertex Shader :

%Vor%

Fragment Shader , MAX_ITERATIONS , XMIN , YMIN und WH sollten in JavaScript gesteuert werden:

%Vor%     
asimes 29.09.2014, 04:31
quelle

2 Antworten

13

Die kurze Antwort ist, dass Sie im Grunde 2 Optionen haben

  1. Werte von JavaScript nach GLSL einheitlich übergeben.

    Wenn Sie beispielsweise einen Float übergeben möchten, erstellen Sie eine Float-Uniform

    %Vor%

    In JavaScript kompilieren und verlinken Sie diesen Shader, dann suchen Sie den Speicherort der Uniform

    %Vor%

    Sie können jetzt einen Wert an GLSL mit

    übergeben %Vor%
  2. Bearbeiten Sie Strings vor dem Kompilieren des Shaders

    %Vor%

    ...

    %Vor%

(1) oben ist zum Übergeben von Dingen, die sich oft ändern. # 2 dient zum Ändern eines Shaders vor dem Kompilieren. # 1 ist eine Technik, die in fast 100% der WebGL-Programme verwendet wird. # 2 wird oft verwendet, wenn Shader im laufenden Betrieb von vielen Game-Engines generiert werden.

    
gman 29.09.2014, 07:21
quelle
0

Es dauerte ungefähr 45 Minuten, um gmans Antwort zu implementieren, weil Ich machte immer wieder dumme kleine Fehler. Also hier ist ein voll funktionierender Code Beispiel , das eine anpassbare Kachelkarte erstellt.

Getestet in: Chrome, Internet Explorer und Edge:

%Vor%     
J MADISON 30.11.2017 04:19
quelle

Tags und Links