Ich habe ein Kachelset mit 8x8-Pixel-Bildern und möchte die Größe in meinem Spiel so ändern, dass sie doppelt so groß sind (16x16 Pixel, z. B. jedes Pixel in einen 2x2-Block verwandeln). Was ich erreichen möchte, ist ein Minecraft- ähnlicher Effekt, bei dem kleine Pixelbilder auf größere blockierbare Pixel skaliert werden.
In Pyglet scale
verwischt die Eigenschaft des Sprites die Pixel. Gibt es einen anderen Weg?
Arbeitscode:
Hier ist die Lösung, die funktioniert (dank DMans Beharrlichkeit und Jimmys Einsicht):
image = resource.image('tileset.png')
texture = image.get_texture()
gl.glTexParameteri(gl.GL_TEXTURE_2D, gl.GL_TEXTURE_MAG_FILTER, gl.GL_NEAREST)
texture.width = 16 # resize from 8x8 to 16x16
texture.height = 16
texture.blit(100, 30) # draw
glEnable(GL_TEXTURE_2D)
. Dann nehmen wir an, Sie hatten einen Anruf bei a = image.load('blah.jpg')
. Weisen Sie tex = a.texture
dann glBindTexture(GL_TEXTURE_2D, texture.id)
und schließlich einen Anruf zu pyglet.gl.glTexParameteri(pyglet.gl.GL_TEXTURE_2D, pyglet.gl.GL_TEXTURE_MIN_FILTER, pyglet.gl.GL_NEAREST)
. Ich bin mit dem Namespace für OpenGL in Python nicht allzu vertraut, daher habe ich den vollständigen Aufruf qualifiziert gelassen. Da wir OpenGL importiert haben, glaube ich, dass Sie zumindest den Pyglet vorne entfernen können , und vielleicht auch gl .
glTexParameteri
. OpenGL 1/2/3 ~ , das ich Pyglet vermuten , basiert diese auf haben unmittelbaren Modus Befehle. Das heißt, Sie führen einen Befehl aus, um den Status zu ändern, und danach ändert sich alles. Ich würde damit beginnen, die Anrufe unter die gl-Anrufe zu verschieben.
from pyglet.gl import *
und rufen Sie dann talisman.org/opengl-1.1/Reference/glTexParameter.html mit anGL_NEAREST
.