Eine Option, die ich für schnell halten kann, ist ein einfacher Fragment-Shader.
Zum Glück haben Sie ein Beispiel ziemlich nahe kommen, was Sie brauchen, dass Schiffe mit Verarbeitung über Datei> Beispiele> Themen> Shaders> Infinite Fliesen
ich nicht in der Lage sein, effizient einen guten Start zu schaffen, zu beenden, aber gibt es eine erschöpfende PShader tutorial on the Processing website, wenn Sie das von Grund auf neu beginnen.
Ein wirklich grober Kern von dem, was Sie brauchen:
- Shadern Programme, die wirklich schnell laufen und auf dem GPU parallelisiert, aufgeteilt in zwei: Vertex-Shader (Deal mit 3D-Geometrie in erster Linie), Fragment-Shader (Deal mit "Fragmenten" (was wird auf dem Bildschirm Pixel werden) hauptsächlich). Sie werden mit einem Fragment Shader spielen wollen
- Die Sprache heißt GLSL und ist ein bisschen anders (weniger Typen, strengere, einfachere Syntax), aber nicht völlig fremd (ähnlich C-Typ deklarieren Variablen, Funktionen, Bedingungen, Schleifen usw.)
- , wenn Sie eine Variable von einem GLSL Programm zugänglich in Verarbeitung machen wollen, dass es mit dem Schlüsselwort
uniform
- Verwendung Präfix textureWrap(REPEAT) Kanten einzuwickeln
- das Bild zu skalieren und wickeln Sie brauchen um die Koordinaten der Texturabtastung zu skalieren:
Hier ist, was die InfiniteTiles scroller Shader wie folgt aussieht:
//---------------------------------------------------------
// Display endless moving background using a tile texture.
// Contributed by martiSteiger
//---------------------------------------------------------
uniform float time;
uniform vec2 resolution;
uniform sampler2D tileImage;
#define TILES_COUNT_X 4.0
void main() {
vec2 pos = gl_FragCoord.xy - vec2(4.0 * time);
vec2 p = (resolution - TILES_COUNT_X * pos)/resolution.x;
vec3 col = texture2D (tileImage, p).xyz;
gl_FragColor = vec4 (col, 1.0);
}
Sie diese ein wenig vereinfachen können, wie Sie zu Scrollen nicht brauchen.Zusätzlich statt Subtrahieren und Multiplizieren (- TILES_COUNT_X * pos
), können Sie einfach mehrfach:
//---------------------------------------------------------
// Display endless moving background using a tile texture.
// Contributed by martiSteiger
//---------------------------------------------------------
uniform float scale;
uniform vec2 resolution;
uniform sampler2D tileImage;
void main() {
vec2 pos = gl_FragCoord.xy * vec2(scale);
vec2 p = (resolution - pos)/resolution.x;
vec3 col = texture2D (tileImage, p).xyz;
gl_FragColor = vec4 (col, 1.0);
}
Hinweis ich die time
Variable umgewidmet habe scale
werden, damit die Verarbeitung Code dieses einheitliche Variable zugreift, muss auch ändern:
//-------------------------------------------------------------
// Display endless moving background using a tile texture.
// Contributed by martiSteiger
//-------------------------------------------------------------
PImage tileTexture;
PShader tileShader;
void setup() {
size(640, 480, P2D);
textureWrap(REPEAT);
tileTexture = loadImage("penrose.jpg");
loadTileShader();
}
void loadTileShader() {
tileShader = loadShader("scroller.glsl");
tileShader.set("resolution", float(width), float(height));
tileShader.set("tileImage", tileTexture);
}
void draw() {
tileShader.set("scale", map(mouseX,0,width,-3.0,3.0));
shader(tileShader);
rect(0, 0, width, height);
}
Bewegen Sie die Maus Skala zu ändern:
aktualisieren Sie mit einem sehr ähnlichen Shader spielen können here:
haben Sie alles versucht ?? und vergiss das sehr efficient das ist nicht deine Fabrik – gpasch