Ich schreibe eine kleine Anwendung, die im Moment eine zufällige Karte von Texturen erzeugt.
Ich zeichne diese Karte als eine 10 x 15 große Gruppe von "Quads", die in Wirklichkeit alle Dreiecksstreifen sind. Ich verwende die "Karte", um eine int zu greifen, die ich dann als die Position der Textur für dieses Quadrat in der textureAtlas nehmen. so zum Beispiel 0 ist die untere linke "Kachel". Der Atlas ist 128 x 128 und in 32 Pixel Kacheln aufgeteilt.
Allerdings scheine ich einige seltsame Artefakte zu bekommen, wo die Textur von einer Kachel in die nächste Kachel kriecht. Ich fragte mich, ob es das Bild selbst war, aber so weit ich sagen kann, sind die Pixel genau dort, wo sie sein sollten. Ich habe mir dann die Texturkoordinaten angesehen, die ich angegeben habe, aber sie sehen alle exakt aus (0,0, 0,25, 0,5, 0,75, 1,0 - die Aufteilung in die 4 Zeilen und Spalten, die ich erwarten würde).
Das Seltsame ist, wenn ich es auf dem Emulator laufen lasse, erhalte ich keine Artefakte.
Gibt es eine Einstellung, die ich übersehe und die ein Ausbluten von 1 Pixel verursachen würde? Es schien auch nur vertikal zu sein - das könnte damit zusammenhängen, dass ich auf dem Telefon das Bild in diese Richtung "strecke", da der Bildschirm des Telefons in dieser Richtung größer als normal ist.
Ich lade die Textur folgendermaßen:
//Get a new ID
int id = newTextureID(gl);
//We will need to flip the texture vertically
Matrix flip = new Matrix();
flip.postScale(1f, -1f);
//Load up and flip the texture
Bitmap temp = BitmapFactory.decodeResource(context.getResources(), resource);
//Store the widths for the texturemap
int width = temp.getWidth();
int height = temp.getHeight();
Bitmap bmp = Bitmap.createBitmap(temp, 0, 0, width, height, flip, true);
temp.recycle();
//Bind
gl.glBindTexture(GL10.GL_TEXTURE_2D, id);
//Set params
gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER, gl.GL_LINEAR);
gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER, gl.GL_LINEAR);
//Push onto the GPU
GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bmp, 0);
TextureAtlas atlas = new TextureAtlas(id, width, height, tileSize);
return atlas;
Ich mache es dann so:
gl.glBindTexture(GL10.GL_TEXTURE_2D, currentAtlas.textureID);
//Enable the vertices buffer for writing and to be used during our rendering
gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
//Specify the location and data format of an array of vertex coordinates to use
gl.glVertexPointer(3, GL10.GL_FLOAT, 0, vertexBuffer);
//Enable the texture buffer
gl.glEnableClientState(GL10.GL_TEXTURE_COORD_ARRAY);
gl.glTexCoordPointer(2, GL10.GL_FLOAT, 0, textureBuffer);
gl.glDrawElements(GL10.GL_TRIANGLES, indices.length, GL10.GL_UNSIGNED_SHORT, indexBuffer);
Ich würde ja ein Foto machen, aber ich weiß nicht, wie man eine Bildschirmkopie vom Telefon macht...
Wenn jemand weiß, wie ich das aktuelle Bild erfassen und vielleicht in einer Datei ausgeben kann, werde ich das tun, wenn es hilft zu erklären, was vor sich geht!
Ich freue mich auf Ihre Antwort.
Bearbeiten: Hier ist ein Bildschirmfoto - beachten Sie, dass ich die App im Querformat ausführe, aber das Foto ist im Hochformat. Auch entschuldigen Sie die schrecklichen Texturen :D sie waren lediglich ein Platzhalter / messing around.