python pyglet opengl create planes in 3d space and then texture map them with a 16x16 pixel tilesheet
import pyglet from pyglet.gl import * rx = ry = rz = 0 class Plane(object): def __init__(self, x, y, z, size, sprite): self.x = x self.y = y self.z = z self.size = size self.sprite = sprite def draw(self): x, y, z = self.x, self.y, self.z size = self.size glPushMatrix() glTranslatef(x, y, z) glScalef(size, size, size) # ROTATE ON UPDATE global rx,ry,rz glRotatef(rz, 0, 0, 1) glRotatef(ry, 0, 1, 0) glRotatef(rx, 1, 0, 0) self.sprite.draw() glPopMatrix() def get_sprite_from_spritesheet(pyglet_image,col=0,row=0): # Create a sub-image from the desired 16x16 pixel icon mx = col*16 my = row*16 sub_image = pyglet_image.get_region(x=0+mx, y=0+my, width=16, height=16) # Create a sprite from the sub-image sprite = pyglet.sprite.Sprite(sub_image) return sprite class IsometricExampleWindow(pyglet.window.Window): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) # Load the sprite sheet self.sprite_sheet = pyglet.image.load("spritesheet.png") # Create planes (x, y, z, size, sprite) self.planes = [ Plane(x= 1, y=0, z=0, size=0.05, sprite = get_sprite_from_spritesheet(pyglet_image=self.sprite_sheet,col=0,row=0)), Plane(x=-1, y=0, z=0, size=0.3, sprite = get_sprite_from_spritesheet(pyglet_image=self.sprite_sheet,col=1,row=1)) ] def on_draw(self): self.clear() # Enable texture mapping glEnable(GL_TEXTURE_2D) # Set the isometric view glMatrixMode(GL_PROJECTION) glLoadIdentity() gluPerspective(45, self.width / self.height, 0.1, 1000) gluLookAt(10, 10, 10, 0, 0, 0, 0, 1, 0) # Draw the planes for plane in self.planes: plane.draw() # Disable texture mapping glDisable(GL_TEXTURE_2D) # THE LOOP def do_update(dt): #print("tick") # # ROTATE ON UPDATE global rx, ry, rz rx += dt * 1 ry += dt * 80 rz += dt * 30 rx %= 360 ry %= 360 rz %= 360 if __name__ == "__main__": window = IsometricExampleWindow(width=512, height=512) pyglet.clock.schedule(do_update) pyglet.app.run()










