Example #1
0
 def __init__(self, pos):
     self._pos = AnimatedVector3(pos)
     self._orientation = AnimatedQuaternion()
     #self.viewangle = -7*math.pi/16
     #self.viewangle = -15*math.pi/32
     self.viewangle = -127 * math.pi / 256
     self._orientation.set(euclid.Quaternion().rotate_axis(
         self.viewangle, euclid.Vector3(1, 0, 0)))
     self._orientation.set_transition(dt=0.5, method="sine")
     self.view_switched = False
     self.vis_distance = 6.5
     self.x_limit = (-20, 20)
     self.y_limit = (15, 40)
     self.z_limit = (-20, 20)
Example #2
0
 def __init__(self, pos):
     self._pos = AnimatedVector3(pos)
     self._orientation = AnimatedQuaternion()
     #self.viewangle = -7*math.pi/16
     #self.viewangle = -15*math.pi/32
     self.viewangle = -127*math.pi/256
     self._orientation.set(euclid.Quaternion().rotate_axis(self.viewangle, euclid.Vector3(1,0,0)))
     self._orientation.set_transition(dt=0.5, method="sine")
     self.view_switched = False
     self.vis_distance = 6.5
     self.x_limit = (-20, 20)
     self.y_limit = (15, 40)
     self.z_limit = (-20, 20)
Example #3
0
 def __init__(self, gamecard, front, back):
     self.gamecard = gamecard
     self.front = front
     self.back = back
     self.hidden = False
     self.width, self.height = self.front.width, self.front.height
     self.size = anim.constant(1.0)
     self._pos = AnimatedVector3(0, 0, 0)
     self.pos_transition = "ease_out_circ"
     self._orientation = AnimatedQuaternion()
     self.visible = anim.constant(1.0)
     self.alpha = anim.constant(1.0)
     if not Card.cardlist:
         Card.cardlist = self.build_displaylist(self.width, self.height)
     #self.renderwidth, self.renderheight = 736, 1050
     #self.renderwidth, self.renderheight = 368, 525
     #self.renderwidth, self.renderheight = 397, 553
     if not Card.fbo: Card.build_fbo()
     if not Card.renderlist:
         Card.renderlist = self.build_renderlist(self.renderwidth,
                                                 self.renderheight)
Example #4
0
 def __init__(self, ctype, color=None):
     self.ctype = ctype
     if not color:
         color = [0, 0, 0]
         temp = hash(ctype) % 2**24
         color[0] = temp / 2**16
         temp = temp % 2**16
         color[1] = temp / 2**8
         color[2] = temp % 2**8
         self.color = (color[0] / 255.0, color[1] / 255.0, color[2] / 255.0)
     else:
         self.color = color
     self.size = anim.constant(1)
     self._pos = AnimatedVector3(0, 0, 0)
     self._orientation = AnimatedQuaternion()
     self.orientation = euclid.Quaternion.new_rotate_axis(
         pi, euclid.Vector3(0, 0, 1))
     self.visible = anim.constant(1.0)
     self.alpha = 0.9  #0.7 #anim.constant(1.0)
     cls = self.__class__
     if not cls.piece_list: self.build_piece_list(cls)
Example #5
0
class Camera(object):
    def pos():
        def fget(self): return euclid.Vector3(self._pos.x, self._pos.y, self._pos.z)
        def fset(self, val):
            self._pos.x = val.x
            self._pos.y = val.y
            self._pos.z = val.z
        return locals()
    pos = property(**pos())
    def orientation():
        def fget(self): return self._orientation.copy()
        def fset(self, val):
            self._orientation.x = val.x
            self._orientation.y = val.y
            self._orientation.z = val.z
            self._orientation.w = val.w
        return locals()
    orientation = property(**orientation())
    def __init__(self, pos):
        self._pos = AnimatedVector3(pos)
        self._orientation = AnimatedQuaternion()
        #self.viewangle = -7*math.pi/16
        #self.viewangle = -15*math.pi/32
        self.viewangle = -127*math.pi/256
        self._orientation.set(euclid.Quaternion().rotate_axis(self.viewangle, euclid.Vector3(1,0,0)))
        self._orientation.set_transition(dt=0.5, method="sine")
        self.view_switched = False
        self.vis_distance = 6.5
        self.x_limit = (-20, 20)
        self.y_limit = (15, 40)
        self.z_limit = (-20, 20)
    def setup(self):
        glPushMatrix()
        glLoadIdentity()
        glMultMatrixf(sixteenfv(*tuple(self.orientation.conjugated().get_matrix())))
        glTranslatef(*tuple(-1*self.pos))
    def reset(self):
        glPopMatrix()
    def move_by(self, delta):
        self._pos -= delta*0.1
        if self.pos.x < self.x_limit[0]: self._pos.x = self.x_limit[0]
        elif self.pos.x > self.x_limit[1]: self._pos.x = self.x_limit[1]
        if self.pos.y <= self.y_limit[0]: self._pos.y = self.y_limit[0]
        elif self.pos.y >= self.y_limit[1]: self._pos.y = self.y_limit[1]
        if self.pos.z < self.z_limit[0]: self._pos.z = self.z_limit[0]
        elif self.pos.z > self.z_limit[1]: self._pos.z = self.z_limit[1]
    def switch_viewpoint(self):
        axis = math.pi/2.+self.viewangle
        angle = math.pi
        if self.view_switched: angle = -1*math.pi
        self._orientation.rotate_axis(angle, euclid.Vector3(0,math.sin(axis),math.cos(axis)))
        self.view_switched = not self.view_switched
    def selection_ray(self, x, y):
        self.setup()
        model_view = (GLdouble * 16)()
        glGetDoublev(GL_MODELVIEW_MATRIX, model_view)
        projection = (GLdouble * 16)()
        glGetDoublev(GL_PROJECTION_MATRIX, projection)
        viewport = (GLint * 4)()
        glGetIntegerv(GL_VIEWPORT, viewport)

        x1, y1, z1 = GLdouble(), GLdouble(), GLdouble()
        x2, y2, z2 = GLdouble(), GLdouble(), GLdouble()
        gluUnProject(x, y, 0, model_view, projection, viewport, x1, y1, z1)
        gluUnProject(x, y, 1, model_view, projection, viewport, x2, y2, z2)
        ray = euclid.Ray3(euclid.Point3(x1.value, y1.value, z1.value),
                          euclid.Point3(x2.value, y2.value, z2.value))
        ray.v.normalize()
        self.reset()
        return ray
    def project_to_window(self, x,y,z):
        self.setup()
        model_view = (GLdouble * 16)()
        glGetDoublev(GL_MODELVIEW_MATRIX, model_view)
        projection = (GLdouble * 16)()
        glGetDoublev(GL_PROJECTION_MATRIX, projection)
        viewport = (GLint * 4)()
        glGetIntegerv(GL_VIEWPORT, viewport)

        x1, y1, z1 = GLdouble(), GLdouble(), GLdouble()
        gluProject(x, y, z, model_view, projection, viewport, x1, y1, z1)
        self.reset()
        return euclid.Vector3(x1.value, y1.value, z1.value)
Example #6
0
class Camera(object):
    def pos():
        def fget(self):
            return euclid.Vector3(self._pos.x, self._pos.y, self._pos.z)

        def fset(self, val):
            self._pos.x = val.x
            self._pos.y = val.y
            self._pos.z = val.z

        return locals()

    pos = property(**pos())

    def orientation():
        def fget(self):
            return self._orientation.copy()

        def fset(self, val):
            self._orientation.x = val.x
            self._orientation.y = val.y
            self._orientation.z = val.z
            self._orientation.w = val.w

        return locals()

    orientation = property(**orientation())

    def __init__(self, pos):
        self._pos = AnimatedVector3(pos)
        self._orientation = AnimatedQuaternion()
        #self.viewangle = -7*math.pi/16
        #self.viewangle = -15*math.pi/32
        self.viewangle = -127 * math.pi / 256
        self._orientation.set(euclid.Quaternion().rotate_axis(
            self.viewangle, euclid.Vector3(1, 0, 0)))
        self._orientation.set_transition(dt=0.5, method="sine")
        self.view_switched = False
        self.vis_distance = 6.5
        self.x_limit = (-20, 20)
        self.y_limit = (15, 40)
        self.z_limit = (-20, 20)

    def setup(self):
        glPushMatrix()
        glLoadIdentity()
        glMultMatrixf(
            sixteenfv(*tuple(self.orientation.conjugated().get_matrix())))
        glTranslatef(*tuple(-1 * self.pos))

    def reset(self):
        glPopMatrix()

    def move_by(self, delta):
        self._pos -= delta * 0.1
        if self.pos.x < self.x_limit[0]: self._pos.x = self.x_limit[0]
        elif self.pos.x > self.x_limit[1]: self._pos.x = self.x_limit[1]
        if self.pos.y <= self.y_limit[0]: self._pos.y = self.y_limit[0]
        elif self.pos.y >= self.y_limit[1]: self._pos.y = self.y_limit[1]
        if self.pos.z < self.z_limit[0]: self._pos.z = self.z_limit[0]
        elif self.pos.z > self.z_limit[1]: self._pos.z = self.z_limit[1]

    def switch_viewpoint(self):
        axis = math.pi / 2. + self.viewangle
        angle = math.pi
        if self.view_switched: angle = -1 * math.pi
        self._orientation.rotate_axis(
            angle, euclid.Vector3(0, math.sin(axis), math.cos(axis)))
        self.view_switched = not self.view_switched

    def selection_ray(self, x, y):
        self.setup()
        model_view = (GLdouble * 16)()
        glGetDoublev(GL_MODELVIEW_MATRIX, model_view)
        projection = (GLdouble * 16)()
        glGetDoublev(GL_PROJECTION_MATRIX, projection)
        viewport = (GLint * 4)()
        glGetIntegerv(GL_VIEWPORT, viewport)

        x1, y1, z1 = GLdouble(), GLdouble(), GLdouble()
        x2, y2, z2 = GLdouble(), GLdouble(), GLdouble()
        gluUnProject(x, y, 0, model_view, projection, viewport, x1, y1, z1)
        gluUnProject(x, y, 1, model_view, projection, viewport, x2, y2, z2)
        ray = euclid.Ray3(euclid.Point3(x1.value, y1.value, z1.value),
                          euclid.Point3(x2.value, y2.value, z2.value))
        ray.v.normalize()
        self.reset()
        return ray

    def project_to_window(self, x, y, z):
        self.setup()
        model_view = (GLdouble * 16)()
        glGetDoublev(GL_MODELVIEW_MATRIX, model_view)
        projection = (GLdouble * 16)()
        glGetDoublev(GL_PROJECTION_MATRIX, projection)
        viewport = (GLint * 4)()
        glGetIntegerv(GL_VIEWPORT, viewport)

        x1, y1, z1 = GLdouble(), GLdouble(), GLdouble()
        gluProject(x, y, z, model_view, projection, viewport, x1, y1, z1)
        self.reset()
        return euclid.Vector3(x1.value, y1.value, z1.value)