Advertisement
Guest User

Untitled

a guest
Oct 20th, 2019
364
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.73 KB | None | 0 0
  1. from pyglet.gl import *
  2. from pyglet.window import key
  3. from pyglet.window import mouse
  4. import math
  5. import time
  6.  
  7. class Camera:
  8.  
  9. def __init__(self, pos, rot):
  10. self.pos = list(pos)
  11. self.rot = list(rot)
  12.  
  13. def update_pos(self, dt, keys):
  14. s = dt*10
  15. rotY = -self.rot[1]/180*math.pi
  16. dx,dz = s*math.sin(rotY),s*math.cos(rotY)
  17. if keys[key.W]: self.pos[0]+=dx; self.pos[2]-=dz
  18. if keys[key.S]: self.pos[0]-=dx; self.pos[2]+=dz
  19. if keys[key.A]: self.pos[0]-=dz; self.pos[2]-=dx
  20. if keys[key.D]: self.pos[0]+=dz; self.pos[2]+=dx
  21.  
  22. if keys[key.SPACE]: self.pos[1]+=s
  23. if keys[key.LSHIFT]: self.pos[1]-=s
  24.  
  25. def update_rot(self, dx, dy):
  26. dx/=8; dy/=8; self.rot[0]+=dy; self.rot[1]-=dx
  27. if self.rot[0]>90: self.rot[0] = 90
  28. elif self.rot[0]<-90: self.rot[0] = -90
  29.  
  30. def apply(self):
  31. glLoadIdentity()
  32. glRotatef(-self.rot[0],1,0,0)
  33. glRotatef(-self.rot[1],0,1,0)
  34. glTranslatef(-self.pos[0],-self.pos[1],-self.pos[2])
  35.  
  36. class Texture_loader:
  37. def load_texture(self,file):
  38. texture = pyglet.image.load(file).get_texture() # loading a texture
  39. glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_NEAREST)
  40. glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_NEAREST)
  41. return pyglet.graphics.TextureGroup(texture)
  42.  
  43. class Player:
  44. def __init__(self,pos=(0,0,0),rot=(0,0)):
  45. self.camera = Camera(pos, rot)
  46. self.get_tex = Texture_loader()
  47. self.box = self.get_tex.load_texture('art/box2.png')
  48.  
  49. self.batch = pyglet.graphics.Batch()
  50. self.wall_list = []
  51. self.wall_list.append(self)
  52.  
  53. def delete(self):
  54. self.wall_list.remove(self)
  55.  
  56. def place_wall(self,pos=None):
  57. print("wall created: ")
  58. if not pos:
  59. pos = self.camera.pos
  60.  
  61. print(int(self.camera.pos[0]), int(self.camera.pos[1]), int(self.camera.pos[2]))
  62. wall_texture = ('t2f',(0,0, 1,0, 1,1, 0,1))
  63. self.batch.add(4,GL_QUADS,self.box,('v3f',(pos[0],0,pos[2], pos[0],0,pos[2]+10, pos[0],5,pos[2]+10, pos[0],5,pos[2])), wall_texture)
  64.  
  65. def place_wall_2(self,pos=None):
  66. print("wall created: ")
  67. if not pos:
  68. pos = self.camera.pos
  69.  
  70. print(int(self.camera.pos[0]), int(self.camera.pos[1]), int(self.camera.pos[2]))
  71. wall_texture = ('t2f', (0,0, 1,0, 1,1, 0,1))
  72. self.batch.add(4,GL_QUADS,self.box,('v3f',(pos[0],0,pos[2], pos[0]+10,0,pos[2], pos[0]+10,5,pos[2], pos[0],5,pos[2])), wall_texture)
  73.  
  74. def reset_pos(self,pos=None):
  75. if not pos:
  76. pos = self.camera.pos
  77. pos[0] = pos[0]
  78. pos[1] = 1.5
  79. pos[2] = pos[2]
  80.  
  81. def draw(self):
  82. self.batch.draw()
  83.  
  84. class Wall:
  85. def __init__(self,pos=(0,0,0),rot=(0,0)):
  86. self.camera = Camera(pos, rot)
  87. self.get_tex = Texture_loader()
  88. self.box = self.get_tex.load_texture('art/box2.png')
  89.  
  90. self.batch = pyglet.graphics.Batch()
  91.  
  92. def place_wall(self,pos=None):
  93. wall = []
  94. print("wall created: ")
  95. print(wall)
  96. if not pos:
  97. pos = self.camera.pos
  98.  
  99. print(int(self.camera.pos[0]), int(self.camera.pos[1]), int(self.camera.pos[2]))
  100. wall_texture = ('t2f',(0,0, 1,0, 1,1, 0,1))
  101. self.batch.add(4,GL_QUADS,self.box,('v3f',(pos[0],0,pos[2], pos[0],0,pos[2]+10, pos[0],5,pos[2]+10, pos[0],5,pos[2])), wall_texture)
  102.  
  103. objwall = []
  104. objwall.append(Wall())
  105.  
  106. class Window(pyglet.window.Window):
  107.  
  108. def set3d(self):
  109. glMatrixMode(GL_PROJECTION)
  110. glLoadIdentity()
  111. gluPerspective(90,self.width/self.height,0.05,1000)
  112. glMatrixMode(GL_MODELVIEW)
  113. glLoadIdentity()
  114.  
  115. def setLock(self,state):
  116. self.lock = state
  117. self.set_exclusive_mouse(state)
  118.  
  119. mouse_lock = property(lambda self:self.lock,setLock)
  120.  
  121. def __init__(self,*args,**kwargs):
  122. super().__init__(*args,**kwargs)
  123. self.lock = False
  124.  
  125. self.set_minimum_size(300,200)
  126. self.keys = key.KeyStateHandler()
  127. self.push_handlers(self.keys)
  128. pyglet.clock.schedule(self.update)
  129.  
  130. self.player = Player((0.5,1.5,1.5),(-30,0))
  131.  
  132. def on_mouse_motion(self,x,y,dx,dy):
  133. if self.mouse_lock:
  134. self.player.camera.update_rot(dx, dy)
  135.  
  136. def on_key_press(self,KEY,MOD):
  137. if KEY == key.ESCAPE:
  138. self.close()
  139. if KEY == key.E: self.mouse_lock = not self.mouse_lock
  140.  
  141. if KEY == key.G:
  142. self.player.reset_pos()
  143. if KEY == key.R:
  144. self.player.place_wall()
  145. if KEY == key.T:
  146. self.player.place_wall_2()
  147.  
  148.  
  149. def update(self, dt):
  150. self.player.camera.update_pos(dt, self.keys)
  151.  
  152. def on_draw(self):
  153. self.clear()
  154. self.set3d()
  155. self.player.camera.apply()
  156. self.player.draw()
  157.  
  158.  
  159. if __name__ == '__main__':
  160. # Add basic config with 4 x MSAA
  161. #config = pyglet.gl.Config(double_buffer=True, sample_buffers=1, samples=4)
  162. #window = Window(width=854,height=480,caption='3d test',resizable=True, config=config)
  163. window = Window(width=854,height=480,caption='3d test',resizable=True)
  164. glClearColor(0,0,0,1)
  165. glEnable(GL_DEPTH_TEST)
  166. #glEnable(GL_CULL_FACE)
  167. pyglet.app.run()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement