def __init__(self): self.last_render_time = 0 self.objects = mjcore.MJVOBJECTS() self.cam = mjcore.MJVCAMERA() self.vopt = mjcore.MJVOPTION() self.ropt = mjcore.MJROPTION() self.con = mjcore.MJRCONTEXT() self.running = False self.speedtype = 1 self.window = None self.model = None self.gui_lock = Lock() self.last_button = 0 self.last_click_time = 0 self.button_left_pressed = False self.button_middle_pressed = False self.button_right_pressed = False self.last_mouse_x = 0 self.last_mouse_y = 0 self.frames = []
def render(self): super(GatherViewer, self).render() tmpobjects = mjcore.MJVOBJECTS() mjlib.mjlib.mjv_makeObjects(byref(tmpobjects), 1000) for obj in self.env.objects: x, y, typ = obj # print x, y qpos = np.zeros_like(self.green_ball_model.data.qpos) qpos[0, 0] = x qpos[1, 0] = y if typ == APPLE: self.green_ball_model.data.qpos = qpos self.green_ball_model.forward() self.green_ball_renderer.render() mjextra.append_objects(tmpobjects, self.green_ball_renderer.objects) else: self.red_ball_model.data.qpos = qpos self.red_ball_model.forward() self.red_ball_renderer.render() mjextra.append_objects(tmpobjects, self.red_ball_renderer.objects) mjextra.append_objects(tmpobjects, self.objects) mjlib.mjlib.mjv_makeLights(self.model.ptr, self.data.ptr, byref(tmpobjects)) mjlib.mjlib.mjr_render(0, self.get_rect(), byref(tmpobjects), byref(self.ropt), byref(self.cam.pose), byref(self.con)) try: import OpenGL.GL as GL except: 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) GL.glEnd() 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.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)