Textur-Wiederholung und spannen in shader

Habe ich die folgenden fragment-und vertex-shader, in dem ich wiederhole textur:

//Fragment
vec2 texcoordC = gl_TexCoord[0].xy;
texcoordC *= 10.0;
texcoordC.x = mod(texcoordC.x, 1.0);
texcoordC.y = mod(texcoordC.y, 1.0);
texcoordC.x = clamp(texcoordC.x, 0.0, 0.9);
texcoordC.y = clamp(texcoordC.y, 0.0, 0.9);
vec4 texColor = texture2D(sampler, texcoordC);
gl_FragColor = texColor;

//Vertex
gl_TexCoord[0] = gl_MultiTexCoord0;
colorC = gl_Color.r;
gl_Position = ftransform();

HINZUGEFÜGT: Nach diesem Prozess, ich hol die textur-Koordinaten und nutzen ein texture-pack:

vec4 textureGet(vec2 texcoord) {
    //Tile is 1.0/16.0 part of texture, on x and y
    float tileSp = 1.0 / 16.0;

    vec4 color = texture2D(sampler, texcoord);
    //Get tile x and y by red color stored
    float texTX = mod(color.r, tileSp);
    float texTY = color.r - texTX;
    texTX /= tileSp;
    //Testing tile
    texTX = 1.0 - tileSp;
    texTY = 1.0 - tileSp;

    vec2 savedC = color.yz;
    //This if else statement can be ignored. I use time to move the texture. Seams show without this as well.
    if (color.r > 0.1) {
        savedC.x = mod(savedC.x + sin(time / 200.0 * (color.r * 3.0)), 1.0);
        savedC.y = mod(savedC.y + cos(time / 200.0 * (color.r * 3.0)), 1.0);
    } else {
        savedC.x = mod(savedC.x + time * (color.r * 3.0) / 1000.0, 1.0);
        savedC.y = mod(savedC.y + time * (color.r * 3.0) / 1000.0, 1.0);
    }
    vec2 texcoordC = vec2(texTX + savedC.x * tileSp, texTY + savedC.y * tileSp);

    vec4 res = texture2D(texturePack, texcoordC);
    return res;
}

Habe ich einige Probleme mit dem zeigen Säume (1 pixel es scheint) jedoch. Wenn ich raus lassen texcoord *= 10.0 keine Nähte sind gezeigt (oder kaum), wenn ich es verlassen, in der Sie erscheinen. Klemme ich die Koordinaten (versuchte sogar niedriger als 1,0 und größer als 0.0) ohne Erfolg. Ich habe stark das Gefühl haben, es ist ein Rundungsfehler irgendwo, aber ich habe keine Ahnung wo. HINZUGEFÜGT: Etwas zu beachten ist, dass in dem konkreten Fall, den ich konvertieren texcoordC x und y auf 8 bit floats. Ich denke, die Ursache liegt hier; ich fügte hinzu, ein anderes shader-Beschreibung vor.

Den Fall, dass ich zeigen ist ein wenig komplizierter in der Realität, so gibt es keine Verwendung für mich, dies zu tun außerhalb der shader(!). Ich fügte hinzu, die Vorherige Frage, das erklärt ein wenig über den Fall.

EDIT: Wie Sie sehen können die Natürliche textur span wird durch 10 geteilt, und die textur wiederholt (10 mal). Die Nähte erscheinen an der Grenze von jedem wiederholende textur. Ich habe auch einen screenshot. Die Nähte sind sehr dünne Linien (~1pixel). Das Bild ist ein Ausschnitt aus einem screenshot, nicht skaliert. Die wiederholte textur ist 16x16 mit 256 Subpixel insgesamt. Textur-Wiederholung und spannen in shader

EDIT: Dies ist ein follow-up Frage: diese Frage, obwohl alle notwendigen Infos sollten hier aufgenommen werden.

Textur-Wiederholung und spannen in shader
Im letzten Bild hat keine Zeit Hinzugefügt.

Textur-Wiederholung und spannen in shader

Textur-Wiederholung und spannen in shader

  • mod(value, 1.0) wird die Ausbeute [0, 1.0[, so clamp(value, 0.0, 0.9) bringt eine Diskontinuität.
  • Ich fügte hinzu, die Klemme später; es würde nicht dazu führen, dass die Nähte entweder würde ich vermuten.
  • Wie sind Sie bei der Einrichtung die textur-Koordinaten für das Objekt, das Sie gerade zeichnen?
  • Was meinst du mit "Nähte"? Wo werden Sie sehen diese Nähte? Was sind Sie versucht zu Rendern, mit diesem?
  • Textur-Koordinaten werden immer von 0..1. Wie Sie sehen können, die sich wiederholenden arbeiten.
  • Bolas: ich habe ein screenshot zeigt den Nähten.
  • Ich glaube, Sie könnten ein Problem mit der Abtastrate. Zumindest mit dem atlas, aber vielleicht auch mit dem Lesen wieder Ihre zuvor gespeicherte UV-coords. Ich kann nicht sehen, wo Sie das Konto für die Hälfte-texel-offset-wenn die Fliesen innerhalb des atlas, und es gibt keine Grenze, so erhalten Sie möglicherweise einige Blutungen. Und wenn es nicht perfekt 1:1-sampling mit dem UV-Lesen-zurück aus dem ersten pass, Sie bekommen das gleiche Problem, das Sie hatte, wenn Sie versuchen zu tun Sie die Fliesen per-vertex, aber in einem kleineren Maßstab. Ich würde vielleicht die debug-rendering von aus den gespeicherten UVs, und überprüfen, dass Sie korrekt Aussehen.
  • Wenn ich die UV ' s (gespeichert als PNG), sieht alles in Ordnung.
  • Können wir das erkennen?
  • Was ist deine Einstellung auf die eigentliche textur? Klemme, wiederholen, Feste Farbe?
  • Ich habe eine Scheibe die UV-Leistung.
  • Auf die eigentliche textur ich habe eine Feste Farbe.
  • Keine chance, das ist, was Sie sehen? Es scheint der Letzte Spielstein in dieser Reihe, nachdem alle. Oder geschieht es egal, welche Fliese, die Sie wollen zu ziehen?
  • Könnte mein browser, aber es sieht aus wie du bist Filterung der UVs.
  • Die UV-Koordinaten als grün(x),blau(y) und rot, wie die texturetile Kanal. Die letztere hat in rot auf null gesetzt.
  • Es passiert, egal welche Fliesen ich zu zeichnen.
  • Ich bekomme einige Blutungen manchmal, aber es scheint zu verschwinden, wenn ich nicht die Zeit-ein Teil der shader.

InformationsquelleAutor RobotRock | 2013-01-26
Schreibe einen Kommentar