Пример #1
0
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()
Пример #2
0
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()