[PD] RE : Re: need help with gem and glsl feedback

Jack jack at rybn.org
Wed Oct 9 12:22:10 CEST 2013


Le 06/10/2013 22:13, Py Fave a écrit :
> Hello , i just opened your last patch and am looking at it .
> weanwhile i reply to your points
>
> 2013/10/6 Jack <jack at rybn.org>:
>> Hello,
>>
>> Le 05/10/2013 22:51, Py Fave a écrit :
>>
>> in fact my problem is not solved .
>> it seems like the feedback effect  happens everywhere but on the
>> surface drawn by the shader .
>>
>> According to the patch, the feedback is applied on a [square 4] (where there
>> is also the [torus 2]).
>> Then, [gemframebuffer] 'snap' the whole 'inside' [square 4]. And your torus
>> is inside this snapshot (as texels and not vertices).
>>
> yes ,and then there is  some feedback on the texels of the square .
> but in my patch if i rotate the torus i get some feedback but not on the
> shaded part (only the silhouette of the torus .  i don't know why .
> i would like everything to go in the feedback loop .
>
> in fact i try to have trails that show "geodesics" on a surface
> later i plan to replace my torus with other models .
>
>
>
>> i use a torus , in perspective wich has a shader applied .
>>
>> i tried the following workaround(archive is joined ) , but still no luck .
>> the file to open has a OPEN in name .
>>
>> It seems there is no circle4.geom, [receive13] and [nshader0]
>> objects/abstractions in your .zip.
> sorry i forgot  .
>
> receive13 only is missing .
> it's part of ext13 library (and is in pd-extended iirc)
> http://puredata.info/downloads/ext13
>
> [receive13 nothing ]could  be replaced by receive nShader1
> or all the shader abstraction can be replaced by the classical shader network
> with fragment shader = circle4.frag  and vertex shader = circle4.vert.
> no .geom was used
>
>
>> i would like the dots to have the feedback ,
>> or dots + geometry alltogether.
>>
>> I can't see dot in your patch (or gem window), maybe they come from geometry
>> shader (which is missing) ?
>>
> i didn't use geometry shader . just  fragment .
> glsl program complains in the abstraction  but no harm here i think
>
>> i tried pix_snap2tex ( using gems.feedback from pdmtl abstractions) too
>> but no luck because we can't choose the mixing function .
>> and i would like only white to make trails .
>> and i don't know how to keep the supporting geometry from appearing .
>> the torus should be full black with a white trail only .
>>
>> A simple possibility is to use 2 torus, a black 'on' a white. And use the
>> white for the trail ?
>>
>> An other way :
>>
>> white torus as texture
>> |__> in the feedback __> output feedback as texture
>> |__> convert white in black texel __> output black torus as texture
>>
>> Then mix (multiply) black torus with white feedback to get a black torus
>> with white trails.
>> ++
>>
>> Jack
>>
> i'll send a modified patch a bit later .
>
> Thank you so much i see some good things from the last patch you sent .
>
> it is not what i want to do but opens other directions
> and perhaps i was focusing on one method but there seems to be alternatives .
>
> i'll update this thread tomorrow .
> i have to keep some life away from computer :-)
>
> Thanks for your help
>
> Py
>
> _______________________________________________
> Pd-list at iem.at mailing list
> UNSUBSCRIBE and account-management -> http://lists.puredata.info/listinfo/pd-list

Hello Pierre-Yves,

This patch should work for your purpose.
If it doesn't work, you have, maybe, a problem with your configuration.
++

Jack


-------------- next part --------------
// Cyrille Henry 2007

void main()
{
    gl_TexCoord[0] = gl_MultiTexCoord0;
    gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;

}
-------------- next part --------------

uniform float time, alpha_back;
uniform vec2 mouse;
uniform vec2 resolution;

uniform sampler2D backbuffer;

#define PI2 6.2831853070


// definition for a scale, rotate, and color transform
// color transform is multiply (darken) only
struct Transform {
	vec4 color;
	vec2 center;
	float scale;
	float rotation;
};

vec2 applyTransform(const Transform t, vec2 v) {
	v -= t.center;
	float c = cos(t.rotation);
	float s = sin(t.rotation);
	return (vec2(
		(v.x*c - v.y*s),
		(v.y*c + v.x*s)) * t.scale + t.center);
}

#define SCALE 5.0

// model will be scaled such that the rectangle (-SCALE/2, -SCALE/2), (SCALE/2, SCALE/2)
// will be centered and fit the window with square aspect ratio.
float scale = SCALE / min(resolution.y,resolution.x);

vec2 mapModelToTexture(const vec2 v) {
	return (v/(resolution*scale) + 0.5);
}

vec2 mapTextureToModel(const vec2 v) {
	return (v - 0.5 * resolution) * scale;
}

// apply transform, return backbuffer sample
vec4 getBackbufferTransform(const Transform t, vec2 v) {
	return t.color * 
		texture2D(backbuffer, 
		   mapModelToTexture(applyTransform(t, v)));
}

vec4 whiten(const vec4 color, float f) {
	return (1.-f)*color + vec4(f);
}

void main( void ) {
	// transform fragment coords to model coords
	vec2 v = mapTextureToModel(gl_FragCoord.xy);

	// draw orbs
	
	const float innerRadius = 0.01;
	float outerRadius = .24 + .03 * (sin(17.*time) + sin(11.*time));
	
	vec2 p1 = (vec2(sin(time), cos(time)));
	vec2 p2 = (vec2(sin(time*1.1), cos(time*1.1)));
	vec2 p3 = (vec2(sin(time*1.3), cos(time*1.3)));

	float d1 = length(v -p1);
	float d2 = length(v -p2);
	float d3 = length(v -p3);

	const float aa = 0.95;
	const float bb = 0.65;
	const float cc = 0.05;
	const vec4 color1 = vec4(aa, bb, cc, 2.0);
	const vec4 color2 = vec4(cc, bb, aa, 2.0);
	const vec4 color3 = vec4(aa, cc, bb, 2.0);

	vec4 drawing = vec4(0.,0.,0.,0.);
	drawing += smoothstep(outerRadius, innerRadius, d1) * color1;
	drawing += smoothstep(outerRadius, innerRadius, d2) * color2;
	drawing += smoothstep(outerRadius, innerRadius, d3) * color3;
	
	// draw ring/disc
	float rr = length(v);
	drawing += vec4(1.)
		* smoothstep(1.1, 1., rr)
		* smoothstep(0.9, 0.5+0.5*sin(0.1*time), rr);

	// apply feedback transforms to backbuffer
	
	// define transform structs
	float r = time*.27;
	Transform t1 = Transform(
		whiten(vec4(aa, bb, cc, 1.0), 0.7), 
		vec2(-.7, 0.),
		1.5, 
		-r*3.);
	Transform t2 = Transform(
		whiten(vec4(cc, bb, aa, 1.0), 0.7),
		vec2(0.7, 0.),
		1.5,
		r*2.);

	// composite feedback with drawing
	vec4 fc = max(	getBackbufferTransform(t1, v),
			getBackbufferTransform(t2, v));
	gl_FragColor = (1.-drawing[3])*fc -vec4(.01) + drawing[3]*drawing;
	gl_FragColor.a = alpha_back;
}

-------------- next part --------------
// Jack/RYBN 2013
#extension GL_ARB_texture_rectangle : enable
uniform sampler2DRect MyTex1, MyTex2;

void main() {
	vec2 tex_coord = gl_FragCoord.st;
	vec4 color = texture2DRect(MyTex1, tex_coord);
	vec4 color0 = texture2DRect(MyTex2, tex_coord);
	color *= 0.01;
	color0 *= 0.99;
	gl_FragColor = color+color0;
 }

-------------- next part --------------
A non-text attachment was scrubbed...
Name: test.pd
Type: application/puredata
Size: 4144 bytes
Desc: not available
URL: <http://lists.puredata.info/pipermail/pd-list/attachments/20131009/fd9f746d/attachment.bin>


More information about the Pd-list mailing list