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)
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)