def __init__(self, size, pos_data, rip_texture=None, stretched=1.0): #TODO: Make kernel size work! #Angle limiting forces #Size if type(size) in [type([]), type(())]: self.size = list(size) else: self.size = [size, size] #Misc. self.view_2d = glLibView2D((0, 0, self.size[0], self.size[1])) #Physics self.forces = [0.0, 0.0, 0.0] #Cloth Parameters self.dampening = 0.98 self.tensor = 1.0 self.angle_tensor = 0.0 #1.0 self.max_jitter_length = 1.0 self.gravity = [0.0, 0.0, 0.0] self.kernel_size = 1 self.steps = 1 self.normal_flip = False self.loop = [False, False] self.time_step = 1.0 #Collision Objects self.num_obstacles = 0 self.collidable = {} self.is_garment = False #Geometry self.particles = glLibGrid2D(self.size) self.particles_mesh = glLibGrid2DMesh(self.size) #Textures self.pos_restrained_tex = glLibTexture2D( pos_data, (0, 0, self.size[0], self.size[1]), GL_RGBA, precision=32) ## self. self.original_pos_restrained_tex = self.pos_restrained_tex self.velocity_tex = glLibTexture2D(None, (0, 0, self.size[0], self.size[1]), GL_RGB, precision=32) self.vec_tex = None self.normal_tex = None self.dist_edges_tex = None self.dist_corners_tex = None self.diffuse_texture = None self.obstacles_tex = None self.obstacles_aux_param_tex = None self.texture_repeat = [1.0, 1.0] #FBOs self.update_framebuffer = glLibFBO(self.size) self.update_framebuffer.add_render_target(1, precision=32, type=GLLIB_RGBA) self.update_framebuffer.add_render_target(2, precision=32) self.update_framebuffer.add_render_target(3, precision=8) #for debugging self.collision_framebuffer = glLibFBO(self.size) self.collision_framebuffer.add_render_target(1, precision=32, type=GLLIB_RGBA) self.collision_framebuffer.add_render_target(2, precision=32) self.collision_framebuffer.add_render_target(3, precision=8) self.normal_framebuffer = glLibFBO(self.size) self.normal_framebuffer.add_render_target(1) self.dist_angle_framebuffer = glLibFBO(self.size) self.dist_angle_framebuffer.add_render_target(1, precision=32, type=GLLIB_RGBA) self.dist_angle_framebuffer.add_render_target(2, precision=32, type=GLLIB_RGBA) self.set_loop(*self.loop) #Shaders ## print "Compiling Update Shader" self.update_shader = glLibShader() self.update_shader.use_prebuilt(GLLIB_CLOTH_UPDATE) ## print "Compiling Collision Shader" self.collision_shader = glLibShader() self.collision_shader.use_prebuilt(GLLIB_CLOTH_COLLIDE) ## print "Compiling Normal Shader" self.normal_shader = glLibShader() self.normal_shader.use_prebuilt(GLLIB_CLOTH_NORMAL) ## print "Compiling Draw Shader" self.draw_shader = glLibShader() self.draw_shader.use_prebuilt(GLLIB_CLOTH_DRAW) ## print "Compiling Distance Shader" self.dist_shader = glLibShader() self.dist_shader.use_prebuilt(GLLIB_CLOTH_DISTANCE) ## self.update_shader.save_vertex() #Get Target Distances self.glLibInternal_push() self.dist_angle_framebuffer.enable([1, 2]) self.glLibInternal_use_dist_shader() self.dist_shader.pass_float("stretched", stretched) glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT) glLoadIdentity() self.view_2d.set_view() self.particles.draw() glLibUseShader(None) self.dist_angle_framebuffer.disable() self.glLibInternal_pop() self.dist_edges_tex = self.dist_angle_framebuffer.get_texture(1) self.dist_corners_tex = self.dist_angle_framebuffer.get_texture(2) #Initialize Position self.glLibInternal_initialize_position()
def __init__(self, size, pos_data, rip_texture=None, stretched=1.0): # TODO: Make kernel size work! # Angle limiting forces # Size if type(size) in [type([]), type(())]: self.size = list(size) else: self.size = [size, size] # Misc. self.view_2d = glLibView2D((0, 0, self.size[0], self.size[1])) # Physics self.forces = [0.0, 0.0, 0.0] # Cloth Parameters self.scale = 1.0 self.trans = [0.0, 0.0, 0.0] self.dampening = 0.98 self.tensor = 1.0 self.angle_tensor = 0.0 # 1.0 self.max_jitter_length = 1.0 self.gravity = [0.0, 0.0, 0.0] self.kernel_size = 1 self.steps = 1 self.normal_flip = False self.loop = [False, False] self.time_step = 1.0 # Collision Objects self.num_obstacles = 0 self.collidable = {} self.is_garment = False # Geometry self.particles = glLibGrid2D(self.size) self.particles_mesh = glLibGrid2DMesh(self.size) # Textures self.pos_restrained_tex = glLibTexture2D(pos_data, (0, 0, self.size[0], self.size[1]), GL_RGBA, precision=32) ## self. self.original_pos_restrained_tex = self.pos_restrained_tex self.velocity_tex = glLibTexture2D(None, (0, 0, self.size[0], self.size[1]), GL_RGB, precision=32) self.vec_tex = None self.normal_tex = None self.dist_edges_tex = None self.dist_corners_tex = None self.diffuse_texture = None self.obstacles_tex = None self.obstacles_aux_param_tex = None self.texture_repeat = [1.0, 1.0] # FBOs self.update_framebuffer = glLibFBO(self.size) self.update_framebuffer.add_render_target(1, precision=32, type=GLLIB_RGBA) self.update_framebuffer.add_render_target(2, precision=32) self.update_framebuffer.add_render_target(3, precision=8) self.collision_framebuffer = glLibFBO(self.size) self.collision_framebuffer.add_render_target(1, precision=32, type=GLLIB_RGBA) self.collision_framebuffer.add_render_target(2, precision=32) self.collision_framebuffer.add_render_target(3, precision=8) self.normal_framebuffer = glLibFBO(self.size) self.normal_framebuffer.add_render_target(1) self.dist_angle_framebuffer = glLibFBO(self.size) self.dist_angle_framebuffer.add_render_target(1, precision=32, type=GLLIB_RGBA) self.dist_angle_framebuffer.add_render_target(2, precision=32, type=GLLIB_RGBA) self.set_loop(*self.loop) # Shaders ## print "Compiling Update Shader" self.update_shader = glLibShader() self.update_shader.use_prebuilt(GLLIB_CLOTH_UPDATE) ## print "Compiling Collision Shader" self.collision_shader = glLibShader() self.collision_shader.use_prebuilt(GLLIB_CLOTH_COLLIDE) ## print "Compiling Normal Shader" self.normal_shader = glLibShader() self.normal_shader.use_prebuilt(GLLIB_CLOTH_NORMAL) ## print "Compiling Draw Shader" self.draw_shader = glLibShader() self.draw_shader.use_prebuilt(GLLIB_CLOTH_DRAW) ## print "Compiling Distance Shader" self.dist_shader = glLibShader() self.dist_shader.use_prebuilt(GLLIB_CLOTH_DISTANCE) ## self.update_shader.save_vertex() # Get Target Distances self.glLibInternal_push() self.dist_angle_framebuffer.enable([1, 2]) self.glLibInternal_use_dist_shader() self.dist_shader.pass_float("stretched", stretched) glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT) glLoadIdentity() self.view_2d.set_view() self.particles.draw() glLibUseShader(None) self.dist_angle_framebuffer.disable() self.glLibInternal_pop() self.dist_edges_tex = self.dist_angle_framebuffer.get_texture(1) self.dist_corners_tex = self.dist_angle_framebuffer.get_texture(2) # Initialize Position self.glLibInternal_initialize_position()
def __init__(self, n, precision=8): #self.n differs from n by a maximum of sqrt(n)+1 self.size = [int(round(n**0.5))] * 2 self.n = self.size[0] * self.size[1] #Shader to update particles self.update_shader = glLibShader() self.update_shader.use_prebuilt(GLLIB_PARTICLE_UPDATE) ## print self.update_shader.errors #Shader to draw particles self.draw_shader = glLibShader() self.draw_shader.use_prebuilt(GLLIB_PARTICLE_DRAW) ## print self.draw_shader.errors #Particles as VBO self.particles = glLibGrid2D(self.size[0]) #Parameters self.origin = [0.0, 0.0, 0.0] self.initialspeed = [0.0, 0.0, 0.0] self.forces = [0.0, 0.0, 0.0] self.scale = [1, 1, 1] self.density = 1.0 self.step = 1.0 / (self.n - 1) self.density_constant = (1.0 / 64.0) * (4.0**log(self.size[0], 2.0)) * self.step self.trans = [0.0, 0.0, 0.0] self.fade = 1.0 self.jitter = [0.0, 0.0, 0.0] self.psize = 100.0 # Edge handling self.negx = 1.0 self.negy = 1.0 self.negz = 1.0 self.posx = 1.0 self.posy = 1.0 self.posz = 1.0 #Data Textures self.pos_time_texture = None self.velocity_texture = None self.view_2D = glLibView2D((0, 0, self.size[0], self.size[1])) self.point_texture = glLibTexture2D("glLib/fireparticle.png", (0, 0, 8, 8), GLLIB_RGBA) self.point_texture.edge(GLLIB_CLAMP) self.precision = precision self.framebuffer1 = glLibFBO(self.size) self.framebuffer1.add_render_target(1, type=GLLIB_RGBA, precision=self.precision) self.framebuffer1.add_render_target(2, type=GLLIB_RGBA, precision=self.precision) self.framebuffer2 = glLibFBO(self.size) self.framebuffer2.add_render_target(1, type=GLLIB_RGBA, precision=self.precision) self.framebuffer2.add_render_target(2, type=GLLIB_RGBA, precision=self.precision) self.pingpong = 1 xvalues = np.zeros(self.n) + 0.5 yvalues = np.zeros(self.n) + 0.5 zvalues = np.zeros(self.n) + 0.5 tvalues = np.arange(0.0, 1.0 + (1.0 / self.n), 1.0 / (self.n - 1.0)).astype(float) zeros = np.zeros(self.n) texarray = np.concatenate([xvalues, yvalues, zvalues, tvalues]).reshape(4, -1).T texarray = texarray.reshape((self.size[0], self.size[1], 4)) self.pos_time_texture = glLibTexture2D( texarray, (0, 0, self.size[0], self.size[1]), GLLIB_RGBA) vecs = np.random.standard_normal(size=(self.size[0], self.size[1], 3)) magnitudes = np.sqrt((vecs * vecs).sum(axis=-1)) uvecs = vecs / magnitudes[..., np.newaxis] randlen = np.random.random((self.size[0], self.size[1])) randvecs = uvecs * randlen[..., np.newaxis] rgb = (((randvecs + 1.0) / 2.0) * 255.0).astype(int) surface = pygame.surfarray.make_surface(rgb) self.rand_tex = glLibTexture2D(surface, (0, 0, self.size[0], self.size[1]), GLLIB_RGB) self.get_new = False self.update() self.get_new = True
def __init__(self,pos_length_surf,grow_surf,length_scale,max_length,density): #Size self.size = list(pos_length_surf.get_size()) #Misc. self.view_2d = glLibView2D((0,0,self.size[0],self.size[1])) self.update_pingpong = 1 #Hair Parameters self.scale = 1.0 self.trans = [0.0,0.0,0.0] self.dampening = 0.98 self.tensor = 1.0 self.gravity = [0.0,0.0,0.0] self.steps = 1 self.density = density self.max_length = max_length self.length_scale = length_scale self.time_step = 1.0 #Physics self.forces = [0.0,0.0,0.0] #Geometry self.particles = glLibGrid2D(self.size) ## self.particles_mesh = glLibGrid2DMesh(self.size) self.particles_mesh = glLibDoubleGrid3DMesh([self.density*self.size[0],self.density*self.size[1],self.max_length]) ## self.particles_mesh = glLibDoubleGrid3DMesh([3,4,5]) self.draw_particles = glLibGrid2D(sc_vec(self.density,self.size)) #Textures self.position_length_textures = [glLibTexture2D(pos_length_surf,(0,0,self.size[0],self.size[1]),GL_RGBA,filtering=GLLIB_FILTER,precision=32)] self.grow_tex = glLibTexture2D(grow_surf,(0,0,self.size[0],self.size[1]),GL_RGB,precision=32) #FBOs self.update_framebuffers1 = [] self.update_framebuffers2 = [] self.grow_framebuffers = [] for hair_segment in xrange(self.max_length): update_framebuffer1 = glLibFBO(self.size) update_framebuffer1.add_render_target(1,precision=32,filter=GLLIB_FILTER,type=GLLIB_RGBA) update_framebuffer1.add_render_target(2,precision=32,filter=GLLIB_FILTER) self.update_framebuffers1.append(update_framebuffer1) update_framebuffer2 = glLibFBO(self.size) update_framebuffer2.add_render_target(1,precision=32,filter=GLLIB_FILTER,type=GLLIB_RGBA) update_framebuffer2.add_render_target(2,precision=32,filter=GLLIB_FILTER) self.update_framebuffers2.append(update_framebuffer2) grow_framebuffer = glLibFBO(self.size) grow_framebuffer.add_render_target(1,precision=32,type=GLLIB_RGBA) self.grow_framebuffers.append(grow_framebuffer) #Shaders self.grow_shader = glLibShader() self.grow_shader.use_prebuilt(GLLIB_HAIR_GROW) self.update_shader = glLibShader() self.update_shader.use_prebuilt(GLLIB_HAIR_UPDATE) self.draw_shader = glLibShader() self.draw_shader.use_prebuilt(GLLIB_HAIR_DRAW) #Grow Hair self.glLibInternal_grow() #Initialize Position self.glLibInternal_initialize_position()
def __init__(self,n,precision=8): #self.n differs from n by a maximum of sqrt(n)+1 self.size = [int(round(n**0.5))]*2 self.n = self.size[0] * self.size[1] #Shader to update particles self.update_shader = glLibShader() self.update_shader.use_prebuilt(GLLIB_PARTICLE_UPDATE) ## print self.update_shader.errors #Shader to draw particles self.draw_shader = glLibShader() self.draw_shader.use_prebuilt(GLLIB_PARTICLE_DRAW) ## print self.draw_shader.errors #Particles as VBO self.particles = glLibGrid2D(self.size[0]) #Parameters self.origin = [0.0,0.0,0.0] self.initialspeed = [0.0,0.0,0.0] self.forces = [0.0,0.0,0.0] self.scale = [1,1,1] self.density = 1.0 self.step = 1.0/(self.n-1) self.density_constant = (1.0/64.0)*(4.0**log(self.size[0],2.0)) * self.step self.trans = [0.0,0.0,0.0] self.fade = 1.0 self.jitter = [0.0,0.0,0.0] self.psize = 100.0 # Edge handling self.negx = 1.0 self.negy = 1.0 self.negz = 1.0 self.posx = 1.0 self.posy = 1.0 self.posz = 1.0 #Data Textures self.pos_time_texture = None self.velocity_texture = None self.view_2D = glLibView2D((0,0,self.size[0],self.size[1])) self.point_texture = glLibTexture2D(os.path.join("glLib","fireparticle.png"),(0,0,8,8),GLLIB_RGBA) self.point_texture.edge(GLLIB_CLAMP) self.precision = precision self.framebuffer1 = glLibFBO(self.size) self.framebuffer1.add_render_target(1,type=GLLIB_RGBA,precision=self.precision) self.framebuffer1.add_render_target(2,type=GLLIB_RGBA,precision=self.precision) self.framebuffer2 = glLibFBO(self.size) self.framebuffer2.add_render_target(1,type=GLLIB_RGBA,precision=self.precision) self.framebuffer2.add_render_target(2,type=GLLIB_RGBA,precision=self.precision) self.pingpong = 1 xvalues = np.zeros(self.n)+0.5 yvalues = np.zeros(self.n)+0.5 zvalues = np.zeros(self.n)+0.5 tvalues = np.arange(0.0, 1.0+(1.0/self.n), 1.0/(self.n-1.0)).astype(float) zeros = np.zeros(self.n) texarray = np.concatenate([xvalues,yvalues,zvalues,tvalues]).reshape(4,-1).T texarray = texarray.reshape((self.size[0],self.size[1],4)) self.pos_time_texture = glLibTexture2D(texarray,(0,0,self.size[0],self.size[1]),GLLIB_RGBA) vecs = np.random.standard_normal(size=(self.size[0],self.size[1],3)) magnitudes = np.sqrt((vecs*vecs).sum(axis=-1)) uvecs = vecs / magnitudes[...,np.newaxis] randlen = np.random.random((self.size[0],self.size[1])) randvecs = uvecs*randlen[...,np.newaxis] rgb = ((randvecs+1.0)/2.0)*255.0 surface = pygame.surfarray.make_surface(rgb) self.rand_tex = glLibTexture2D(surface,(0,0,self.size[0],self.size[1]),GLLIB_RGB) self.get_new = False self.update() self.get_new = True
def __init__(self, pos_length_surf, grow_surf, length_scale, max_length, density): #Size self.size = list(pos_length_surf.get_size()) #Misc. self.view_2d = glLibView2D((0, 0, self.size[0], self.size[1])) self.update_pingpong = 1 #Hair Parameters self.scale = 1.0 self.trans = [0.0, 0.0, 0.0] self.dampening = 0.98 self.tensor = 1.0 self.gravity = [0.0, 0.0, 0.0] self.steps = 1 self.density = density self.max_length = max_length self.length_scale = length_scale self.time_step = 1.0 #Physics self.forces = [0.0, 0.0, 0.0] #Geometry self.particles = glLibGrid2D(self.size) ## self.particles_mesh = glLibGrid2DMesh(self.size) self.particles_mesh = glLibDoubleGrid3DMesh([ self.density * self.size[0], self.density * self.size[1], self.max_length ]) ## self.particles_mesh = glLibDoubleGrid3DMesh([3,4,5]) self.draw_particles = glLibGrid2D(sc_vec(self.density, self.size)) #Textures self.position_length_textures = [ glLibTexture2D(pos_length_surf, (0, 0, self.size[0], self.size[1]), GL_RGBA, filtering=GLLIB_FILTER, precision=32) ] self.grow_tex = glLibTexture2D(grow_surf, (0, 0, self.size[0], self.size[1]), GL_RGB, precision=32) #FBOs self.update_framebuffers1 = [] self.update_framebuffers2 = [] self.grow_framebuffers = [] for hair_segment in xrange(self.max_length): update_framebuffer1 = glLibFBO(self.size) update_framebuffer1.add_render_target(1, precision=32, filter=GLLIB_FILTER, type=GLLIB_RGBA) update_framebuffer1.add_render_target(2, precision=32, filter=GLLIB_FILTER) self.update_framebuffers1.append(update_framebuffer1) update_framebuffer2 = glLibFBO(self.size) update_framebuffer2.add_render_target(1, precision=32, filter=GLLIB_FILTER, type=GLLIB_RGBA) update_framebuffer2.add_render_target(2, precision=32, filter=GLLIB_FILTER) self.update_framebuffers2.append(update_framebuffer2) grow_framebuffer = glLibFBO(self.size) grow_framebuffer.add_render_target(1, precision=32, type=GLLIB_RGBA) self.grow_framebuffers.append(grow_framebuffer) #Shaders self.grow_shader = glLibShader() self.grow_shader.use_prebuilt(GLLIB_HAIR_GROW) self.update_shader = glLibShader() self.update_shader.use_prebuilt(GLLIB_HAIR_UPDATE) self.draw_shader = glLibShader() self.draw_shader.use_prebuilt(GLLIB_HAIR_DRAW) #Grow Hair self.glLibInternal_grow() #Initialize Position self.glLibInternal_initialize_position()