예제 #1
0
    def start(self, window):
        self.running = True

        width, height = glfw.get_framebuffer_size(window)
        width1, height = glfw.get_window_size(window)
        self.scale = width * 1.0 / width1

        self.window = window

        functions.mjv_defaultCamera(self.cam)
        functions.mjv_defaultOption(self.vopt)
        functions.mjr_defaultContext(self.con)
        functions.mjv_makeScene(self.scn, 1000)

        if self.model:
            functions.mjr_makeContext(self.model, self.con, 150)
            self.autoscale()
        else:
            functions.mjr_makeContext(None, self.con, 150)
예제 #2
0
파일: gather_env.py 프로젝트: gntoni/garage
    def render(self):
        super(GatherViewer, self).render()
        ctx = MjRenderContext(self.env.wrapped_env.sim)
        scn = ctx.scn
        con = ctx.con
        functions.mjv_makeScene(scn, 1000)
        scn.camera[0].frustum_near = 0.05
        scn.camera[1].frustum_near = 0.05

        for obj in self.env.objects:
            x, y, typ = obj
            qpos = np.zeros_like(self.green_ball_sim.data.qpos)
            qpos[0] = x
            qpos[1] = y
            if typ == APPLE:
                self.green_ball_sim.data.qpos[:] = qpos
                self.green_ball_sim.forward()
                self.green_ball_renderer.render()
                self.green_ball_ctx = MjRenderContext(self.green_ball_sim)
                functions.mjv_addGeoms(self.green_ball_sim.model,
                                       self.green_ball_sim.data,
                                       self.green_ball_ctx.vopt,
                                       self.green_ball_ctx.pert, CAT_ALL, scn)
            else:
                self.red_ball_sim.data.qpos[:] = qpos
                self.red_ball_sim.forward()
                self.red_ball_renderer.render()
                self.red_ball_ctx = MjRenderContext(self.red_ball_sim)
                functions.mjv_addGeoms(self.red_ball_sim.model,
                                       self.red_ball_sim.data,
                                       self.red_ball_ctx.vopt,
                                       self.red_ball_ctx.pert, CAT_ALL, scn)

        functions.mjv_addGeoms(self.env.wrapped_env.sim.model,
                               self.env.wrapped_env.sim.data, ctx.vopt,
                               ctx.pert, CAT_ALL, scn)
        functions.mjr_render(self.green_ball_renderer.get_rect(), scn, con)

        try:
            import OpenGL.GL as GL
        except ImportError:
            return

        def draw_rect(x, y, width, height):
            # start drawing a rectangle
            GL.glBegin(GL.GL_QUADS)
            # bottom left point
            GL.glVertex2f(x, y)
            # bottom right point
            GL.glVertex2f(x + width, y)
            # top right point
            GL.glVertex2f(x + width, y + height)
            # top left point
            GL.glVertex2f(x, y + height)

        def refresh2d(width, height):
            GL.glViewport(0, 0, width, height)
            GL.glMatrixMode(GL.GL_PROJECTION)
            GL.glLoadIdentity()
            GL.glOrtho(0.0, width, 0.0, height, 0.0, 1.0)
            GL.glMatrixMode(GL.GL_MODELVIEW)
            GL.glLoadIdentity()

        GL.glBegin(GL.GL_QUADS)
        GL.glLoadIdentity()
        width, height = glfw.get_framebuffer_size(self.window)
        refresh2d(width, height)
        GL.glDisable(GL.GL_LIGHTING)
        GL.glEnable(GL.GL_BLEND)

        GL.glColor4f(0.0, 0.0, 0.0, 0.8)
        draw_rect(10, 10, 300, 100)

        apple_readings, bomb_readings = self.env.get_readings()
        for idx, reading in enumerate(apple_readings):
            if reading > 0:
                GL.glColor4f(0.0, 1.0, 0.0, reading)
                draw_rect(20 * (idx + 1), 10, 5, 50)
        for idx, reading in enumerate(bomb_readings):
            if reading > 0:
                GL.glColor4f(1.0, 0.0, 0.0, reading)
                draw_rect(20 * (idx + 1), 60, 5, 50)