Witam otóż mam taki oto problem normalnie se gre programuje jest fajnie śmiga elegancko aż do chwili kiedy postanowiłem dodać textury dla cube-ów wtedy zamiast 60fps miałem już na samym starcie 40fps i cały czas spadały non stop podejrzewam że to problem z kodem więc wysyłam go tu.
from pyglet.gl import *
from pyglet.window import key
import math
W = 1366
H = 768
class Model:
def get_tex(self,file):
tex = pyglet.image.load(file).get_mipmapped_texture()
glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_NEAREST)
glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_NEAREST)
return pyglet.graphics.TextureGroup(tex)
def __init__(self):
self.batch = pyglet.graphics.Batch()
def Chunks_Generation(self,Chunk = (0,0,0)):
self.Chunk = list(Chunk)
self.dt = self.get_tex('topdirt.png')
self.db = self.get_tex('bottomdirt.png')
self.ds = self.get_tex('sidedirt.png')
color = ('c3f',(0.5,1,0.5,)*4)
tex_coords = ('t2f',(0,0,1,0,1,1,0,1,))
x,y,z = 0,0,0
X,Y,Z = x+0.5,y+0.5,z+0.5
while self.Chunk[0]<32:
self.Chunk[0] = self.Chunk[0]+1
x=x+0.5
X=X+0.5
self.batch.add(4, GL_QUADS, self.ds, ('v3f', (x, y, z, X, y, z, X, Y, z, x, Y, z)), tex_coords)
self.batch.add(4, GL_QUADS, self.ds, ('v3f', (x, y, Z, X, y, Z, X, Y, Z, x, Y, Z)), tex_coords)
self.batch.add(4, GL_QUADS, self.ds, ('v3f', (x, y, z, x, y, Z, x, Y, Z, x, Y, z)), tex_coords)
self.batch.add(4, GL_QUADS, self.ds, ('v3f', (X, y, z, X, y, Z, X, Y, Z, X, Y, z)), tex_coords)
self.batch.add(4, GL_QUADS, self.dt, ('v3f', (x, Y, z, x, Y, Z, X, Y, Z, X, Y, z)), tex_coords)
self.batch.add(4, GL_QUADS, self.db, ('v3f', (x, y, z, x, y, Z, X, y, Z, X, y, z)), tex_coords)
while self.Chunk[2] < 32:
self.Chunk[2] = self.Chunk[2] + 1
z = z + 0.5
Z = Z + 0.5
self.batch.add(4, GL_QUADS, self.ds, ('v3f', (x, y, z, X, y, z, X, Y, z, x, Y, z)), tex_coords)
self.batch.add(4, GL_QUADS, self.ds, ('v3f', (x, y, Z, X, y, Z, X, Y, Z, x, Y, Z)), tex_coords)
self.batch.add(4, GL_QUADS, self.ds, ('v3f', (x, y, z, x, y, Z, x, Y, Z, x, Y, z)), tex_coords)
self.batch.add(4, GL_QUADS, self.ds, ('v3f', (X, y, z, X, y, Z, X, Y, Z, X, Y, z)), tex_coords)
self.batch.add(4, GL_QUADS, self.dt, ('v3f', (x, Y, z, x, Y, Z, X, Y, Z, X, Y, z)), tex_coords)
self.batch.add(4, GL_QUADS, self.db, ('v3f', (x, y, z, x, y, Z, X, y, Z, X, y, z)), tex_coords)
def draw(self):
self.batch.draw()
class Player:
def __init__(self,pos=(0,0,0),rot=(0,0)):
self.pos = list(pos)
self.rot = list(rot)
def mouse_motion(self,dx,dy):
dx/=8; dy/=8; self.rot[0]+=dy; self.rot[1]-=dx
if self.rot[0]>90: self.rot[0] = 90
elif self.rot[0]<-90:self.rot[0] = -90
def update(self,dt,keys):
s = dt*10
rotY = -self.rot[1]/180*math.pi
dx,dz = s*math.sin(rotY),s*math.cos(rotY)
if keys[key.W]: self.pos[0] +=dx; self.pos[2] -=dz
if keys[key.S]: self.pos[0] -=dx; self.pos[2] +=dz
if keys[key.A]: self.pos[0] -=dz; self.pos[2] -=dx
if keys[key.D]: self.pos[0] +=dz; self.pos[2] +=dx
if keys[key.SPACE]: self.pos[1] +=s
if keys[key.LSHIFT]: self.pos[1] -=s
class Window(pyglet.window.Window):
def push(self,pos,rot): glPushMatrix(); glRotatef(-rot[0],1,0,0); glRotatef(-rot[1],0,1,0); glTranslatef(-pos[0],-pos[1],-pos[2])
def Projection(self): glMatrixMode(GL_PROJECTION); glLoadIdentity()
def Model(self): glMatrixMode(GL_MODELVIEW); glLoadIdentity()
def set2D(self): self.Projection(); gluOrtho2D(0,self.width,0,self.height); self.Model()
def set3D(self):
self.Projection()
gluPerspective(70,self.width/self.height,0.05,1000)#Perspektywa
self.Model()
def setLock(self,state): self.lock = state; self.set_exclusive_mouse(state)
lock = False;mouse_lock = property(lambda self:self.lock,setLock)
def __init__(self,*args,**kwargs):
super().__init__(*args,**kwargs)
self.set_minimum_size(1280,720)
self.keys = key.KeyStateHandler()
self.push_handlers(self.keys)
pyglet.clock.schedule(self.update)
self.model = Model()
self.player = Player((0,1.5,10),(-30,0))
def on_mouse_motion(self,x,y,dx,dy):
if self.mouse_lock : self.player.mouse_motion(dx,dy)
def on_key_press(self,KEY,MOD):
if KEY == key.X: self.close()
elif KEY == key.ESCAPE: self.mouse_lock = not self.mouse_lock
def update(self,dt):
self.player.update(dt,self.keys)
def on_draw(self):
self.clear()
self.set3D()
self.push(self.player.pos,self.player.rot)
self.model.Chunks_Generation()
self.model.draw()
glPopMatrix()
if __name__ == '__main__':
window = Window(width=W,height=H,caption='Zajebista Gra',resizable=True)
glClearColor(0.5,0.7,1,1)
glEnable(GL_DEPTH_TEST)
pyglet.app.run()