summaryrefslogtreecommitdiff
path: root/web/bigai/myrender.py
blob: d49e69b57d3a5baeab6cf1da5e35700404cb8a8f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
import gym
from gym.envs.classic_control import rendering
import math
from pyglet.gl import *
import pyglet

class Attr(object):
    def enable(self):
        raise NotImplementedError
    def disable(self):
        pass


class Color(Attr):
    def __init__(self, vec4):
        self.vec4 = vec4
    def enable(self):
        glColor4f(*self.vec4)
p
class Geom(object):
    def __init__(self):
        self._color=Color((0, 0, 0, 1.0))
        self.attrs = [self._color]
    def render(self):
        for attr in reversed(self.attrs):
            attr.enable()
        self.render1()
        for attr in self.attrs:
            attr.disable()
    def render1(self):
        raise NotImplementedError
    def add_attr(self, attr):
        self.attrs.append(attr)
    def set_color(self, r, g, b, alpha=1):
        self._color.vec4 = (r, g, b, alpha)


class FilledPolygon(Geom):
    def __init__(self, v):
        Geom.__init__(self)
        self.v = v
    def render1(self):
        if   len(self.v) == 4 : glBegin(GL_QUADS)
        elif len(self.v)  > 4 : glBegin(GL_POLYGON)
        else: glBegin(GL_TRIANGLES)
        for p in self.v:
            glVertex3f(p[0], p[1],0)  # draw each vertex
        glEnd()

        color = (self._color.vec4[0] * 0.5, self._color.vec4[1] * 0.5, self._color.vec4[2] * 0.5, self._color.vec4[3] * 0.5)
        glColor4f(*color)
        glBegin(GL_LINE_LOOP)
        for p in self.v:
            glVertex3f(p[0], p[1],0)  # draw each vertex
        glEnd()


class MyEnv(gym.Env):
    metadata = {
        'render.modes': ['human', 'rgb_array'],
        'videos.frames_per_second': 2
    }

    def __init__(self):
        self.viewer = rendering.Viewer(800, 600)

    # def render(self, mode='human', close=False):
    #     line1 = rendering.Line((100, 300), (500, 300))
    #     line2 = rendering.Line((100, 200), (500, 200))
    #     line1.set_color(0, 0, 0)
    #     line2.set_color(0, 0, 0)
    #     self.viewer.add_geom(line1)
    #     self.viewer.add_geom(line2)
    #     return self.viewer.render(return_rgb_array=mode == 'rgb_array')

    def make_agent(self):
        radius = 10
        res = 30
        WORLD_WIDTH = 10
        visual_distance = 100
        points = []
        for i in range(res):
            ang = 2*math.pi*i/res
            points.append([math.cos(ang)*radius, math.sin(ang)*radius])
        for i in range(9):
            ang = 2 * math.pi * (i - 4) / res
            points.append((math.cos(ang) * visual_distance + radius, math.sin(ang) * visual_distance))
        return points


    # def render(self, mode='human', close=False):
    #     circle = rendering.make_circle(30)
    #     circle_transform = rendering.Transform(translation=(100, 100))
    #     circle.add_attr(circle_transform)
    #     self.viewer.add_geom(circle)
    #     return self.viewer.render(return_rgb_array=mode == 'rgb_array')

    def render(self, mode='human'):
        agent_points = self.make_agent()
        agent = FilledPolygon(agent_points)
        trans = rendering.Transform(translation=(200, 200))
        agent.add_attr(trans)
        self.viewer.add_geom(agent)
        return self.viewer.render(return_rgb_array=mode == 'rgb_array')

if __name__ == '__main__':
    env = MyEnv()
    while True:
        env.render()