def __init__(self): """Constructor""" self.forklift = Forklift() self.surround = Surround() self.init_stacks()
class Scene(object): """Adegan untuk ditampilkan lewat OpenGL.""" def __init__(self): """Constructor""" self.forklift = Forklift() self.surround = Surround() self.init_stacks() def init_stacks(self): """Atur kondisi awal tumpukan peti.""" objects = [ (lambda: glutSolidSphere(0.4, 20, 10), True), (lambda: glutSolidTorus(0.15, 0.3, 20, 20), True), (self.dodecahedron, True), (self.octahedron, True), (self.tetrahedron, True), (self.icosahedron, True), (self.mini_forklift, False), (self.mini_robot, False), ] self.stack1 = CrateStack(5, 4, 90) self.stack2 = CrateStack(5, 4, 90) self.stack3 = CrateStack(5, 4, -90) self.stack4 = CrateStack(5, 4, -90) for i in range(4): for j in range(4): (obj, canRot) = objects[randint(0, len(objects) - 1)] self.stack1.insert(Crate(obj, canRot), i, j) (obj, canRot) = objects[randint(0, len(objects) - 1)] self.stack2.insert(Crate(obj, canRot), i, j) def glInit(self): """View diharapkan untuk memanggil ini selama inisialisasi pipa OpenGL. Ini mengatur setiap saluran pipa hanya menyatakan bahwa model ingin menggunakan""" glColorMaterial(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE) glEnable(GL_COLOR_MATERIAL) glEnable(GL_BLEND) glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA) self.surround.glInit() def glDisplay(self): """Mengeluarkan seluruh adegan ke pipa/saluran OpenGL.""" glLightfv(GL_LIGHT0, GL_POSITION, (-20, 10, -19, 0)) self.surround.glDisplay() glPushMatrix() glTranslatef(6, 0, 0) self.stack1.display() glPopMatrix() glPushMatrix() glTranslatef(5, 0, 0) self.stack2.display() glPopMatrix() glPushMatrix() glTranslatef(-5, 0, 0) self.stack3.display() glPopMatrix() glPushMatrix() glTranslatef(-6, 0, 0) self.stack4.display() glPopMatrix() self.forklift.display() def mini_forklift(self): """ Draw a miniature forklift (sized to fit in a crate). Menggambarkan forklift miniatur (ukurannya pas dengan peti) """ glPushMatrix() glTranslatef(0, -0.45, 0) glScalef(0.25, 0.25, 0.25) glRotate(90, 0, 1, 0) glTranslatef(0, 0, -0.6) Forklift().display() glPopMatrix() def mini_robot(self): glPushMatrix() glTranslate(0, 0, -0.1) glScalef(0.3, 0.3, 0.3) Robot().display() glPopMatrix() def dodecahedron(self): """ Draw a dodecahedron (sized to fit in a crate). Menggambarkan dodecahedron (ukurannya pas di peti) """ glPushMatrix() glScalef(0.25, 0.25, 0.25) glutSolidDodecahedron() glPopMatrix() def octahedron(self): """ Draw an octahedron (sized to fit in a crate). Menggambarkan octahedron (ukurannya pas di peti) """ glPushMatrix() glScalef(0.4, 0.4, 0.4) glutSolidOctahedron() glPopMatrix() def tetrahedron(self): """ Draw a tetrahedron (sized to fit in a crate). Menggambar tetrahedron (ukurannya pas dengan peti). """ glPushMatrix() glScalef(0.4, 0.4, 0.4) glutSolidTetrahedron() glPopMatrix() def icosahedron(self): """ Draw an icosahedron (sized to fit in a crate). Menggambarkan icosahedron (ukurannya pas di peti) """ glPushMatrix() glScalef(0.4, 0.4, 0.4) glutSolidIcosahedron() glPopMatrix()
class Scene(object): """A scene for display via OpenGL.""" def __init__(self): """Constructor""" self.forklift = Forklift() self.surround = Surround() self.init_stacks() def init_stacks(self): """Setup the initial state of the crate stacks.""" objects = [ (lambda: glutSolidSphere(0.4,20,10), True), (lambda: glutSolidTorus(0.15,0.3,20,20), True), (self.dodecahedron, True), (self.octahedron, True), (self.tetrahedron, True), (self.icosahedron, True), (self.mini_forklift, False), (self.mini_robot, False), ] self.stack1 = CrateStack(5,4, 90) self.stack2 = CrateStack(5,4, 90) self.stack3 = CrateStack(5,4, -90) self.stack4 = CrateStack(5,4, -90) for i in range(4): for j in range(4): (obj,canRot) = objects[randint(0, len(objects)-1)] self.stack1.insert(Crate(obj, canRot),i,j) (obj,canRot) = objects[randint(0, len(objects)-1)] self.stack2.insert(Crate(obj, canRot),i,j) def glInit(self): """The View is expected to call this during OpenGL pipeline initialisation. It sets up any once-only pipeline states that the model wishes to use""" glColorMaterial(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE) glEnable(GL_COLOR_MATERIAL) glEnable(GL_BLEND) glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA) self.surround.glInit() def glDisplay(self): """Output the entire scene to the OpenGL pipeline.""" glLightfv(GL_LIGHT0, GL_POSITION, (-20,10,-19,0)) self.surround.glDisplay() glPushMatrix() glTranslatef(6,0,0) self.stack1.display() glPopMatrix() glPushMatrix() glTranslatef(5,0,0) self.stack2.display() glPopMatrix() glPushMatrix() glTranslatef(-5,0,0) self.stack3.display() glPopMatrix() glPushMatrix() glTranslatef(-6,0,0) self.stack4.display() glPopMatrix() self.forklift.display() def mini_forklift(self): """Draw a miniature forklift (sized to fit in a crate).""" glPushMatrix() glTranslatef(0,-0.45,0) glScalef(0.25,0.25,0.25) glRotate(90, 0,1,0) glTranslatef(0,0,-0.6) Forklift().display() glPopMatrix() def mini_robot(self): glPushMatrix() glTranslate(0,0,-0.1) glScalef(0.3,0.3,0.3) Robot().display() glPopMatrix() def dodecahedron(self): """Draw a dodecahedron (sized to fit in a crate).""" glPushMatrix() glScalef(0.25,0.25,0.25) glutSolidDodecahedron() glPopMatrix() def octahedron(self): """Draw an octahedron (sized to fit in a crate).""" glPushMatrix() glScalef(0.4,0.4,0.4) glutSolidOctahedron() glPopMatrix() def tetrahedron(self): """Draw a tetrahedron (sized to fit in a crate).""" glPushMatrix() glScalef(0.4,0.4,0.4) glutSolidTetrahedron() glPopMatrix() def icosahedron(self): """Draw an icosahedron (sized to fit in a crate).""" glPushMatrix() glScalef(0.4,0.4,0.4) glutSolidIcosahedron() glPopMatrix()