def axes(length=1.0): glPushMatrix() scale(length) # y-axis arrow_2d() # z-axis glPushMatrix() rotate(90.0, 0.0, 0.0) arrow_2d() glPopMatrix() # x-axis glPushMatrix() rotate(0.0, 0.0, -90.0) arrow_2d() glPopMatrix() glPopMatrix()
def cube(*args, **kwargs): global HasContext if not HasContext: glutInit() HasContext = True glPushMatrix() scale(*args) style = kwargs.get('style', 'wireframe') texture = kwargs.get('texture', None) if texture: style = 'solid' if style == 'wireframe': glutWireCube(1.0) elif style == 'solid': #glutSolidCube(1.0) if type(texture) == dict: # top texture['top'].bind() glBegin(GL_QUADS) glNormal3f( 0.0, 0.0, 1.0) glTexCoord2f(0.0, 0.0); glVertex3f(-0.5, -0.5, 0.5) glTexCoord2f(1.0, 0.0); glVertex3f( 0.5, -0.5, 0.5) glTexCoord2f(1.0, 1.0); glVertex3f( 0.5, 0.5, 0.5) glTexCoord2f(0.0, 1.0); glVertex3f(-0.5, 0.5, 0.5) glEnd() # bottom texture['bottom'].bind() glBegin(GL_QUADS) glNormal3f( 0.0, 0.0,-1.0) glTexCoord2f(1.0, 0.0); glVertex3f(-0.5, -0.5, -0.5) glTexCoord2f(1.0, 1.0); glVertex3f(-0.5, 0.5, -0.5) glTexCoord2f(0.0, 1.0); glVertex3f( 0.5, 0.5, -0.5) glTexCoord2f(0.0, 0.0); glVertex3f( 0.5, -0.5, -0.5) glEnd() # sides texture['sides'].bind() glBegin(GL_QUADS) # back glNormal3f( 0.0, 1.0, 0.0) glTexCoord2f(1.0, 0.0); glVertex3f(-0.5, 0.5, -0.5) glTexCoord2f(1.0, 1.0); glVertex3f(-0.5, 0.5, 0.5) glTexCoord2f(0.0, 1.0); glVertex3f( 0.5, 0.5, 0.5) glTexCoord2f(0.0, 0.0); glVertex3f( 0.5, 0.5, -0.5) # front glNormal3f( 0.0, -1.0, 0.0) glTexCoord2f(0.0, 0.0); glVertex3f(-0.5, -0.5, -0.5) glTexCoord2f(1.0, 0.0); glVertex3f( 0.5, -0.5, -0.5) glTexCoord2f(1.0, 1.0); glVertex3f( 0.5, -0.5, 0.5) glTexCoord2f(0.0, 1.0); glVertex3f(-0.5, -0.5, 0.5) # right glNormal3f( 1.0, 0.0, 0.0) glTexCoord2f(0.0, 0.0); glVertex3f( 0.5, -0.5, -0.5) glTexCoord2f(1.0, 0.0); glVertex3f( 0.5, 0.5, -0.5) glTexCoord2f(1.0, 1.0); glVertex3f( 0.5, 0.5, 0.5) glTexCoord2f(0.0, 1.0); glVertex3f( 0.5, -0.5, 0.5) # left glNormal3f(-1.0, 0.0, 0.0) glTexCoord2f(1.0, 0.0); glVertex3f(-0.5, -0.5, -0.5) glTexCoord2f(1.0, 1.0); glVertex3f(-0.5, -0.5, 0.5) glTexCoord2f(0.0, 1.0); glVertex3f(-0.5, 0.5, 0.5) glTexCoord2f(0.0, 0.0); glVertex3f(-0.5, 0.5, -0.5) glEnd() else: if texture: texture.bind() glBegin(GL_QUADS) # top glNormal3f( 0.0, 0.0, 1.0) glTexCoord2f(0.0, 0.0); glVertex3f(-0.5, -0.5, 0.5) glTexCoord2f(1.0, 0.0); glVertex3f( 0.5, -0.5, 0.5) glTexCoord2f(1.0, 1.0); glVertex3f( 0.5, 0.5, 0.5) glTexCoord2f(0.0, 1.0); glVertex3f(-0.5, 0.5, 0.5) # bottom glNormal3f( 0.0, 0.0,-1.0) glTexCoord2f(1.0, 0.0); glVertex3f(-0.5, -0.5, -0.5) glTexCoord2f(1.0, 1.0); glVertex3f(-0.5, 0.5, -0.5) glTexCoord2f(0.0, 1.0); glVertex3f( 0.5, 0.5, -0.5) glTexCoord2f(0.0, 0.0); glVertex3f( 0.5, -0.5, -0.5) # sides # back glNormal3f( 0.0, 1.0, 0.0) glTexCoord2f(1.0, 0.0); glVertex3f(-0.5, 0.5, -0.5) glTexCoord2f(1.0, 1.0); glVertex3f(-0.5, 0.5, 0.5) glTexCoord2f(0.0, 1.0); glVertex3f( 0.5, 0.5, 0.5) glTexCoord2f(0.0, 0.0); glVertex3f( 0.5, 0.5, -0.5) # front glNormal3f( 0.0, -1.0, 0.0) glTexCoord2f(0.0, 0.0); glVertex3f(-0.5, -0.5, -0.5) glTexCoord2f(1.0, 0.0); glVertex3f( 0.5, -0.5, -0.5) glTexCoord2f(1.0, 1.0); glVertex3f( 0.5, -0.5, 0.5) glTexCoord2f(0.0, 1.0); glVertex3f(-0.5, -0.5, 0.5) # right glNormal3f( 1.0, 0.0, 0.0) glTexCoord2f(0.0, 0.0); glVertex3f( 0.5, -0.5, -0.5) glTexCoord2f(1.0, 0.0); glVertex3f( 0.5, 0.5, -0.5) glTexCoord2f(1.0, 1.0); glVertex3f( 0.5, 0.5, 0.5) glTexCoord2f(0.0, 1.0); glVertex3f( 0.5, -0.5, 0.5) # left glNormal3f(-1.0, 0.0, 0.0) glTexCoord2f(1.0, 0.0); glVertex3f(-0.5, -0.5, -0.5) glTexCoord2f(1.0, 1.0); glVertex3f(-0.5, -0.5, 0.5) glTexCoord2f(0.0, 1.0); glVertex3f(-0.5, 0.5, 0.5) glTexCoord2f(0.0, 0.0); glVertex3f(-0.5, 0.5, -0.5) glEnd() if texture: texture.unbind() else: raise Exception('vroom.cube: invalid style value') glPopMatrix()