Hi Johann,

All good points... docs could use a bit of an update.  

Have you looked at the feedback example that comes with Fluxus? Or the Rdex 
Fluxus - http://code.google.com/p/rdex-fluxus/

I like your livecoding of shaders... nice touch.

Cheers
Evan
 


On 15 May 2011, at 12:11, Johann Korndoerfer wrote:

> Hi, i'm new
> 
> 
> I am currently trying to do postprocessing in a shader with fluxus (for blur, 
> glow, distortion, kaleidoscope, ...). Below is how i do it currently, which 
> works fine, except i have a few issues with it:
> 
> 0) fluxus limits texture size to power-of-two which is no longer needed, 
> every graphics card should be able to use arbitrary sizes AFAIK. This is only 
> a minor performance and image quality issue.
> 
> 1) It seems that the primitive must be drawn (with the mysterious #t flag) 
> and hiding it won't work. I have to move it out of the way, which is a really 
> crude workaround.
> 
> 2) When i use the mouse to change the camera transform, of course i rotate 
> the pixels primitive (or the plane, if i draw onto one) instead of the 
> objects rendered into its texture. I tried storing the cam transform, setting 
> the transform to its initial state and applying it by hand to the objects 
> drawn (see the code below). Somehow, the current cam transform seems to be 
> ignored - i suspect the cam transform is set before every-frame calls its 
> payload and not when i call set-camera-transform. So i tried storing the cam 
> transform and then multiplying its inverse onto the current matrix to get a 
> pristine state for drawing the plane, only to discover that minverse doesn't 
> actually invert matrices. Im out of ideas now.
> 
> 3) It's an awful lot of code with lots of stuff to get wrong when coding it 
> live.
> 
> 
> 
> Here is my simple 4-fold symmetry kaleidoscope effect. Drag the mouse and 
> you'll see what i mean.
> 
> (clear)
> (reset-camera)
> 
> (define v
> "
> varying vec2 tc;
> void main(){
>   gl_Position = ftransform();
>   tc = gl_MultiTexCoord0.st;
> }")
> 
> (define f
> "
> uniform sampler2D tex;
> varying vec2 tc;
> void main() {
>  gl_FragColor = texture2D(tex,abs(tc-vec2(0.5))+vec2(0.5));
> }")
> 
> (define p (build-pixels 2048 1024 #t))
> (with-primitive p
>  ;(hide 1)
>  (translate (vector 23232342 0 0)))
> 
> 
> (define transform (mtranslate (vector 0 0 -10)))
> (define (render)
>  (texture (load-texture "test.png"))
>  (with-state
>    (identity)
>    (concat transform) ;apply cam transform
>    (scale 15.0)
>    (draw-cube)))
> 
> (every-frame
>  (begin
>    (set! transform (get-camera-transform)) ;store cam tranform
>    (set-camera-transform (mtranslate (vector 0 0 -10))) ;this seems to be 
> ignored for the current frame
>    (with-pixels-renderer p
>      (render))
>    (with-state
>      (texture (pixels->texture p))
>      (shader-source v f)
>      (scale (vector 20 15 1)) ;somehow, scaling by 20 and 15 makes it fit my 
> screen
>      (draw-plane))
>    (set-camera-transform transform) ;restore cam transform
>    (unlock-camera)))
> 
> 
> 
> I'd appreciate any suggestions.
> 
> 
> Thanks,
> Johann

Reply via email to