Tôi có một khối hình ảnh 8 x 8 pixel và tôi muốn thay đổi kích thước chúng trong trò chơi của mình để chúng tăng gấp đôi (16x16 pixel, ví dụ: biến mỗi pixel thành một khối 2x2.) Điều tôi đang cố gắng đạt được là một Minecraft- như hiệu ứng, trong đó bạn có tỷ lệ hình ảnh pixel nhỏ đến các pixel khối lớn hơn.
Trong Pyglet, thuộc tính của sprite scale
làm mờ các pixel. Có cách nào khác không?
Mã làm việc:
Đây là giải pháp hiệu quả (nhờ sự kiên trì của DMan và sự sáng suốt của 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)
. Sau đó, hãy nói rằng bạn đã có một cuộc gọi đến a = image.load('blah.jpg')
. Chỉ định tex = a.texture
sau đó glBindTexture(GL_TEXTURE_2D, texture.id)
và cuối cùng là một cuộc gọi đến pyglet.gl.glTexParameteri(pyglet.gl.GL_TEXTURE_2D, pyglet.gl.GL_TEXTURE_MIN_FILTER, pyglet.gl.GL_NEAREST)
. Tôi không quá quen thuộc với không gian tên cho OpenGL trong python, vì vậy tôi đã để lại toàn bộ cuộc gọi đủ điều kiện. Kể từ khi chúng tôi nhập khẩu OpenGL, tôi tin rằng bạn có thể loại bỏ ít nhất các pyglet ở phía trước, và có lẽ GL quá.
glTexParameteri
. OpenGL 1/2 / ~ 3 mà tôi đoán Pyglet dựa trên việc có các lệnh chế độ tức thời này . Đó là, bạn thực thi một lệnh để thay đổi trạng thái, sau đó mọi thứ sau đó sẽ thay đổi. Tôi sẽ bắt đầu bằng cách di chuyển các cuộc gọi bên dưới các cuộc gọi gl.
from pyglet.gl import *
, sau đó thực hiện cuộc gọi tới Talisman.org/opengl-1.1/Reference/glTexParameter.html vớiGL_NEAREST
.