Vortrag:fluxus

aus dem Wiki des Entropia e.V., CCC Karlsruhe
So sah es im Club zeitweise aus
oder so


Vortrag von cupe am 19.07.2011

Anlaesslich unseres neuen Projektors (heute gekommen) loese ich meine Versprechen ein und halte sofort damit einen Vortag. Da ich ab Mittwoch erstmal weg bin muss das eben morgen sein. Vielleicht wird es auch eher 20:23 als 20:00.


Ich habe auf der GPN11 schon VJ gespielt und live Visuals zu Musik programmiert - morgen werde ich das Tool das ich benutzt habe (fluxus) vorstellen und wir werden gemeinsam bunte bewegte Dinge zu Musik damit basteln (Also: ich werde tippen, ihr sagt mir was ich ausprobieren soll). Als Nebeneffekt lernt der geneigte Zuschauer noch ein wenig Scheme (ein Lisp-Dialekt) und Grafikprogrammierung (incl. Shaderkram). Ja, das geht bestimmt alles in 90Minuten. Ganz sicher! :)


Ergebnis

Zu irgendeinem Zeitpunkt sah der Code so oder so aehnlich aus - das davon erzeugte Bild sieht man rechts. Teile des Codes (der shader) funktioniert nur mit dem experimentellen florolf-branch von fluxus, der hoffentlich demnaechst huebsch gemacht und als patch commited wird. Einfach die (pp-shader...) Forms entfernen, dann laeufts auch mit dem master.


(hint-nozwrite)

(blend-mode 'src-alpha 'one)


(osc-source "8000")

(pp-shader "

uniform float wobble;
uniform float time;
uniform float foo;
uniform sampler2D tex;
varying vec2 tc;


void main ()
{


vec2 t = tc - vec2(0.5, 0.5);

float angle = atan2(t.y, t.x);
float radius = length(t);

angle = sin(3.0*angle+radius*foo*0.2);

//radius = 0.2 / radius;


vec2 coords = vec2 (cos(angle), sin(angle))* radius + vec2(0.5, 0.5);
vec4 color = texture2D(tex,coords);

gl_FragColor = color + vec4(0.0, 0.0, 0.0, 0.0);
}


")


(define (cubes n)
  (draw-cube)
  (rotate (vector (* 2 (cos (* 1.3 (time))))
                  (* 3 (sin (time)))
                  (* 0.03 foo)))
  (scale 0.99)
  (when (> n 0)
    (cubes (- n 1))))


(define (truncate zahl)
  (- zahl (floor zahl)))

(define (ring n)
  (with-state
    (rotate (vector 0 0 (* 10 n)))
    (translate (vector (+ 15 fader) 0 0))
    (rotate (vector 0 (+ (* 100 (time)) (* 5 n)) 0))
    (scale (vector 13 0.3 0.3))
    (colour (hsv->rgb (vector (truncate (+ (* 0.001 state) (* 0.01 fader) (/ n 36))) 0.5 0.8))) 
    (draw-sphere))
  (when (> n 0)
    (ring (- n 1))))

(define foo 0)

(define state 0)

(define fader 0)

(osc-destination "osc.udp://192.168.24.85:9000")

(define (render)
  (when (osc-msg "/accxyz")
    (set! fader (osc 0)))
  (osc-send "/1/fader1" "f" (list (* 0.008 (gh 0))))
  (set! fluxus-scratchpad-effect-ripple-size (* 1 (gh 0)))
  (set! foo (max foo (gh 0)))
  (set! foo (* foo 0.97))
  (set! state (+ state (gh 1)))
  (pp-shader-set! (list "time" (time)
                        "wobble" (* 0.001 (gh 0))
                        "foo" foo))
  (with-state
    (scale 15)
    (colour (vmul (vector 0.5 (* 0.02 (gh 0)) (* 0.01 foo)) 0.1) ) 
    (texture (load-texture "tex/border.png"))
    (rotate (vector (* 30 (time)) 0 0))
    (cubes 100))

  (texture 0)
  
  (ring 35))

(every-frame (render))