123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197 |
- import moderngl_window as mglw
- import moderngl
- #import moderngl.window
- import time
- #print(dir(moderngl))
- #export DISPLAY=:99.0
- #Xvfb :99 -screen 0 640x480x24 &
- #redirects screen output to invisibel framebuffer
- # python3 main.py --window glfw --fullscreen --samples 16 --cursor false --size 800x600
- vertex_shader = """
- #version 430
- in vec3 in_position;
- void main(){
- gl_Position = vec4(in_position, 0.9);
- }
- """
- fragment_shader = """
- #version 430
- out vec4 fragColor;
- uniform vec2 resolution;
- uniform float time;
- vec2 rotate2D(vec2 uv, float a){
- float s = sin(a);
- float c = cos(a);
- return mat2(c,-s,s,c) * uv;
- }
- vec3 ring(vec3 col,vec2 uv, int z,float ang, float speed,float scaleX, float scaleY){
- //z =1; //count of star's
- //ang = 270;
- for( float i=0.0; i < z; i++){
- float a = 0;
- a = ang/z * i * (3.1415/180) ;
- a += time*speed;
- float dy = cos(a)/2;
- float dx = sin(a)/2;
- dy = dy * scaleY; // *.4; // scale y
- dx = dx * scaleX; //*.9; // scale x
- col += 0.01 / length(uv+vec2(dx+0.1,dy) );
- }
- col *= sin(vec3(0.2,0.8,0.9) * time) * 0.15 +0.25;
- fragColor = vec4(col, 1.0);
- return col;
- //return fragColor;
- }
- void main() {
- vec2 uv = (gl_FragCoord.xy - resolution.xy/2) / resolution.y;
- vec3 col = vec3(0.0);
-
- //uv = rotate2D(uv, 3.14/2.0+3.2);
- //uv = rotate2D(uv, 3.14/2.0);
- float r = 0.17;
-
- int z = 10;
- float ang = 360;
- float speed = .9;
- z = 50; //count of star's
- ang = 270;
- speed = -.1;
- col = ring(col,uv, z, ang, speed, .9, .4);
-
- z = 10;
- //col = ring(col,uv, z, 270,0.1, .7, .7);
- z =2; //count of star's
- ang = 90;
- speed = 10;
- col = ring(col,uv, z, ang, speed, .6, .2);
- z = 20; //count of star's
- ang = 360;
- speed = 0.5;
- col = ring(col,uv, z, ang, speed, .5, .5);
- /*
- float i = 0;
- float a = time+i;
- a = ang/z * i * (3.1415/180) ;
- a += time/4;
- float dx = 0.1;//cos(a)/2;
- float dy = 0.1;//sin(a)/2;
- //col += 0.01 / length(uv+vec2(dx+0.1,dy) );
- col += 0.03 / length(uv+vec2(dx+0.5,dy) );
- //col *= sin(vec3(0.8,0.2,0.9) * time) * 0.15 +0.25;
- fragColor = vec4(col, 1.0);
- dx = 0.2;
- dy = 0.42;
- col += 0.01 / length(uv+vec2(dx+0.5,dy) );
- fragColor = vec4(col, 1.0);
- uv + vec2(0,0);
- col = vec3(0.0);
- //fragColor = vec4(vec3(0,0,1), 1.0);
- //fragColor[0] = [0,0,1,1];
- */
- }
- """
- vertex_shader2 = """
- #version 450
- in vec3 in_position;
- void main(){
- gl_Position = vec4(in_position, 0.9);
- const vec3 positions[3] = vec3[3](
- vec3(1.f,1.f, 0.0f),
- vec3(-1.f,1.f, 0.0f),
- vec3(0.f,-1.f, 0.0f)
- );
- //output the position of each vertex
- //gl_Position = vec4(positions, 1.0f);
- //gl_Position = vec4(1.f,1.f, 0.0f, 1.0f);
- //gl_Position = vec4(-1.f,1.f, 0.0f, 1.0f);
- //gl_Position = vec4(1.f,-1.f, 0.0f, 1.0f);
- //gl_Position = vec4(positions[gl_VertexIndex], 1.0f);
- }
- """
- fragment_shader2 = """
- #version 450
- out vec4 fragColor;
- uniform vec2 resolution;
- uniform float time;
- void main(){
- vec2 uv = (gl_FragCoord.xy - resolution.xy/2) / resolution.y;
- vec3 col = vec3(0.0);
- fragColor = vec4(1.f,0.f,0.f,1.0f);
- }
- """
- class Screen(mglw.WindowConfig):
- window_size = 600, 300
- window_size = 900, 506
- #resource_dir = 'programms'
- def __init__(self,**args):
- super().__init__(**args)
- self.quad = mglw.geometry.quad_fs()
- # load shader's as string
- self.prog = self.ctx.program(vertex_shader=vertex_shader,
- fragment_shader=fragment_shader)
- # load shader's form file
- #self.prog = self.load_program(vertex_shader='vertex_shader.gls1',
- # #fragment_shader='fragment_shader.gls1')
- self.set_uniform('resolution',self.window_size)
- self.t = time.time()
- def set_uniform(self,u_name, u_value):
- try:
- self.prog[u_name] = u_value
- except KeyError:
- print(f'uniform: {u_name} - not used in shader')
- def render(self,_time,frame_time):
- self.ctx.clear()
- self.set_uniform('time',_time)
- if self.t+10 < time.time():
- print(_time)
- self.t = time.time()
- self.quad.render(self.prog)
- if __name__ == "__main__":
- mglw.run_window_config(Screen)
|