Ejemplo n.º 1
0
    def _init(self):
        global shader, x_id, y_id, z_id
        global projection_matrix_id, modelview_matrix_id
        global color_id

        # shader setup
        shader = gl.shaders.compileProgram(
            shaders.compileShader(vertex_shader, gl.GL_VERTEX_SHADER),
            shaders.compileShader(fragment_shader, gl.GL_FRAGMENT_SHADER),
        )
        gl.glLinkProgram(shader)

        # get memory offsets for shader variables
        color_id = gl.glGetAttribLocation(shader, b'color')
        x_id = gl.glGetUniformLocation(shader, b'x')
        y_id = gl.glGetUniformLocation(shader, b'y')
        z_id = gl.glGetUniformLocation(shader, b'z')
        modelview_matrix_id = gl.glGetUniformLocation(shader,
                                                      b'modelview_matrix')
        projection_matrix_id = gl.glGetUniformLocation(shader,
                                                       b'projection_matrix')

        # initialize the scene
        galaxies = []
        for i in range(3):
            pos = Transform.random_vector() * 5
            #pos = mathutils.Vector((0, 0, 0))
            galaxies.append(
                Galaxy(position=pos,
                       mass=1,
                       body_count=-1,
                       color=self.COLORS[i]))

        self.universe = Universe(galaxies)

        gl.glEnable(gl.GL_BLEND)
        gl.glBlendFunc(gl.GL_SRC_ALPHA, gl.GL_ONE)

        gl.glEnable(gl.GL_PROGRAM_POINT_SIZE)
        #gl.glEnable(gl.GL_DEPTH_TEST)
        #gl.glDepthFunc(gl.GL_LESS)
        #gl.glDepthMask(gl.GL_FALSE)
        #gl.glEnable(gl.GL_DEPTH_CLAMP)
        gl.glEnable(gl.GL_POINT_SMOOTH)
        gl.glEnable(gl.GL_LINE_SMOOTH)
        #gl.glPointSize(2.0)
        gl.glLineWidth(1.0)

        self.last_time = time.time()
Ejemplo n.º 2
0
    def __init__(self,
                 position,
                 mass=1,
                 body_count=-1,
                 color=(1, 1, 1),
                 ecc=1.0):
        self.transform = Transform(pos=position, rot=-1)
        self.velocity = 0 * mathutils.Vector(
            -0.25 * Universe.dt * self.position +
            (Universe.dt / 15) * Transform.random_vector())
        self.mass = mass
        self.body_count = body_count
        self.color = np.array(color, dtype=np.float32)
        self.ecc = ecc

        if self.body_count < 0:
            self.body_count = 150000

        # buffer stuff
        self.body_positions = np.ndarray((self.body_count, 4),
                                         dtype=np.float32)
        self.body_velocities = np.ndarray((self.body_count, 4),
                                          dtype=np.float32)
        self.body_colors = np.ndarray((self.body_count, 4), dtype=np.float32)
        self.body_positions_vbo = vbo.VBO(data=self.body_positions,
                                          usage=gl.GL_DYNAMIC_DRAW,
                                          target=gl.GL_ARRAY_BUFFER)
        self.body_velocities_vbo = vbo.VBO(data=self.body_velocities,
                                           usage=gl.GL_DYNAMIC_DRAW,
                                           target=gl.GL_ARRAY_BUFFER)
        self.body_colors_vbo = vbo.VBO(data=self.body_colors,
                                       usage=gl.GL_DYNAMIC_DRAW,
                                       target=gl.GL_ARRAY_BUFFER)
        self.body_positions_cl_buffer = None
        self.body_velocities_cl_buffer = None
        self.body_colors_cl_buffer = None

        self.body_positions_vbo.bind()
        self.body_velocities_vbo.bind()
        self.body_colors_vbo.bind()

        self.vertex_array = gl.glGenVertexArrays(1)