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