私は8x8ピクセルの画像のタイルセットを持っているので、ゲームでそれらのサイズを2倍に変更したいと思います(16x16ピクセル、たとえば各ピクセルを2x2ブロックに変換します)。私が達成しようとしているのはMinecraft-エフェクトのように、小さなピクセルイメージをより大きなブロックピクセルにスケーリングします。
Pygletでは、スプライトのscale
プロパティはピクセルをぼかします。他の方法はありますか?
作業コード:
これが機能する解決策です(DManの永続性とJimmyの洞察力に感謝します)。
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)
。次に、が呼び出されたとしa = image.load('blah.jpg')
ます。tex = a.texture
次にglBindTexture(GL_TEXTURE_2D, texture.id)
、最後にへの呼び出しを割り当てpyglet.gl.glTexParameteri(pyglet.gl.GL_TEXTURE_2D, pyglet.gl.GL_TEXTURE_MIN_FILTER, pyglet.gl.GL_NEAREST)
ます。私はPythonのOpenGLの名前空間についてあまり詳しくないので、完全な呼び出しを修飾しました。OpenGLをインポートしたので、少なくとも前面のpygletを削除でき、おそらくglも削除できると思います。
glTexParameteri
。Pygletがベースにしていると思われるOpenGL 1/2 /〜3には、これらの即時モードコマンドがあります。つまり、コマンドを実行して状態を変更すると、その後のすべてが変更されます。まず、glコールの下にコールを移動します。
from pyglet.gl import *
、でtalisman.org/opengl-1.1/Reference/glTexParameter.htmlを呼び出しますGL_NEAREST
。