Habe mir nach Euren Anraten verschiedene Python videos angesehen, und eines wollte ich probieren.
Leider funktioniert es nicht, obwohl es im Video funktioniert.
Ein paar sachen habe ich probiert, damit ich eventuell ausschliessen kann, dass eine Erweiterung fehlt, oder offensichtlich fehlerhaft ist.
Anbei folgenden Code: Es soll an einen Objekt Texturen wie Grass geladen und angebracht werden.
Code: Alles auswählen
from pyglet.gl import *
class Model:
def get_tex(self,file):
tex = pyglet.image.load(file).texture
return pyglet.graphics.TextureGroup(tex)
def __init__(self):
self.top = self.get_tex('grass_top.JPG')
self.side = self.get_tex('grass_side.JPG')
self.bottom = self.get_tex('erde.JPG')
self.batch = pyglet.graphics.Batch()
tex_coords = ('t2f', (0,0, 1,0, 1,1, 0,1, ))
x,y,z = 0,0,0
X,Y,Z = x+1, y+1, z+1
self.batch.add(4, GL_QUADS, self.side, ('v3f', (x,y,z, X,y,z, X,Y,z, x, Y, z, )), tex_coords)
def draw(self):
self.batch.draw()
class Window(pyglet.window.Window):
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); self.Model()
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.set_minimum_size(300, 200)
self.model = Model()
def on_draw(self):
self.clear()
self.model.draw()
if __name__ == '__main__':
window = Window(width=400, height=300, caption='Minecraft', resizable=True)
glClearColor(0.5,0.7,1,1)
pyglet.app.run()
Code: Alles auswählen
Python 3.7.3 (v3.7.3:ef4ec6ed12, Mar 25 2019, 22:22:05) [MSC v.1916 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license()" for more information.
>>>
===== RESTART: C:\Users\Christian\Documents\Programmieren\Python\cube.py =====
Traceback (most recent call last):
File "C:\Users\Christian\Documents\Programmieren\Python\cube.py", line 49, in <module>
window = Window(width=400, height=300, caption='Minecraft', resizable=True)
File "C:\Users\Christian\Documents\Programmieren\Python\cube.py", line 42, in __init__
self.model = Model()
File "C:\Users\Christian\Documents\Programmieren\Python\cube.py", line 12, in __init__
self.top = self.get_tex('grass_top.JPG')
File "C:\Users\Christian\Documents\Programmieren\Python\cube.py", line 6, in get_tex
tex = pyglet.image.load(file).texture
AttributeError: 'ImageData' object has no attribute 'texture'
Die Texturen werden mit der Variable Tex geladen, dann wird jede Texture einer Seite zugeordnet. In meinen Fall Top, side und bottom. Damit er weiss welche Texture wohin gehört habe ich jeder Texture eine bezeichnung gegeben. Aus meiner Sicht, sieht es recht ok aus, ich verstehe nur nicht wieso der keine Attribute hat, wenn das Bild mittels pyglet.image.load geladen wurde.
Ich glaube ich werde nochmals von vorne anfangen.