2016-05-08 16 views
0

Ich versuche, Textur mit Größe 16x16 in Rechteck 100x100 zu kacheln. Ich setze GL_TEXTURE_WRAP_S und GL_TEXTURE_WRAP_T auf GL_REPEAT, aber es gibt keine Wirkung (siehe Bild unten). Wie man Bilder richtig kachelt? Sollte ich anstelle von glDrawArrays eine andere Methode zum Zeichnen verwenden?OpenGL Textur Tiling funktioniert nicht richtig

ursprüngliche Textur 16x16

Original texture 16x16

Tatsächliches Ergebnis:

Actual result

Code:

glEnable(GL_LINE_SMOOTH); 
glHint(GL_LINE_SMOOTH_HINT, GL_NICEST); 
glEnable(GL_POINT_SMOOTH); 
glHint(GL_POINT_SMOOTH_HINT, GL_NICEST); 
glEnableClientState(GL_VERTEX_ARRAY); 
glEnableClientState(GL_COLOR_ARRAY); 
glEnableClientState(GL_TEXTURE_COORD_ARRAY); 
glEnable(GL_TEXTURE_2D); 
glBindTexture(GL_TEXTURE_2D, texture.getId()); 
glTexParameterf(GL_TEXTURE_2D, GL_GENERATE_MIPMAP, GL_TRUE); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); 
glEnable(GL_BLEND); 
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 

// GL_REPEAT 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); 

glPushMatrix(); 
glVertexPointer(VERTEX_POINTER_COUNT, GL_FLOAT, 0, vertexPointer); 
glColorPointer(COLOR_POINTER_COUNT, GL_FLOAT, 0, colorPointer); 
glTexCoordPointer(TEXTURE_COORD_POINTER_COUNT, GL_FLOAT, 0, texCoordPointer); 
glDrawArrays(GL_TRIANGLES, 0, 6); 
glPopMatrix(); 

glEnable(GL_TEXTURE_2D); 
glBindTexture(GL_TEXTURE_2D, NULL_ID); 
glDisable(GL_TEXTURE_2D); 
glDisableClientState(GL_VERTEX_ARRAY); 
glDisableClientState(GL_COLOR_ARRAY); 
glDisableClientState(GL_TEXTURE_COORD_ARRAY); 
glDisable(GL_BLEND); 

UPD.

// Texture coordinates 
private float[] uv = new float[]{0, 0, 0, 1, 1, 1, 1, 0}; 
public final FloatBuffer texCoordPointer = BufferUtils.createFloatBuffer(2 * 3 * 2 * 2); 
texCoordPointer.clear(); 
texCoordPointer.put(uv[0]).put(uv[1]); 
texCoordPointer.put(uv[2]).put(uv[3]); 
texCoordPointer.put(uv[4]).put(uv[5]); 
texCoordPointer.put(uv[0]).put(uv[1]); 
texCoordPointer.put(uv[4]).put(uv[5]); 
texCoordPointer.put(uv[6]).put(uv[7]); 
texCoordPointer.flip(); 
+3

Was ist die Reichweite Ihrer Texturkoordinaten? –

+0

20, 20, 120, 120 –

+0

@KolesnikovichDmitry: Er sagte "Textur-Koordinaten", nicht Positionen. Das Zeug in 'texCoordPointer', nicht in' vertexPointer'. –

Antwort

1

Wenn Sie die Textur zum Beispiel 6-mal wiederholt wollen, sollten Sie Ihre Texturkoordinaten im Bereich [0.0, 6.0]