FazBrowse GitHub Viewer | Trending |
URL:
| Home
Tools: [Download Repo ZIP]   [Original HTTPS Page]

Adding the shader examples · pif/processing@3328cea · GitHub

Repository navigation

Commit 3328cea

Browse files
committed
Adding the shader examples
1 parent c994e73 commit 3328cea

27 files changed

Lines changed: 1128 additions & 0 deletions

File tree

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
// Bad-print shader. Adapted from rom Fluxus Shader Library:
2+
// http://www.pawfal.org/index.php?page=FluxusHardwareShaderLibrary
3+
4+
import controlP5.*;
5+
6+
ControlP5 controlP5;
7+
8+
PShader badPrint;
9+
10+
boolean enabled = true;
11+
float scaleR = 1.0, scaleG = 1.0, scaleB = 1.0;
12+
float offsetR = 0.2, offsetG = 0.2, offsetB = 0.2;
13+
float registerR = 0.2, registerG = 0.2, registerB = 0.2;
14+
float sizeR = 0.1, sizeG = 0.2, sizeB = 0.1;
15+
16+
public void setup() {
17+
size(800, 800, P3D);
18+
19+
noStroke();
20+
fill(204);
21+
22+
badPrint = loadShader("BadPrintFrag.glsl", "BadPrintVert.glsl");
23+
24+
sphereDetail(60);
25+
26+
controlP5 = new ControlP5(this);
27+
controlP5.addToggle("enabled").linebreak();
28+
controlP5.addSlider("scaleR", 0, 1);
29+
controlP5.addSlider("scaleG", 0, 1);
30+
controlP5.addSlider("scaleB", 0, 1).linebreak();
31+
controlP5.addSlider("offsetR", 0, 1);
32+
controlP5.addSlider("offsetG", 0, 1);
33+
controlP5.addSlider("offsetB", 0, 1).linebreak();
34+
controlP5.addSlider("registerR", 0, 1);
35+
controlP5.addSlider("registerG", 0, 1);
36+
controlP5.addSlider("registerB", 0, 1).linebreak();
37+
controlP5.addSlider("sizeR", 0, 1);
38+
controlP5.addSlider("sizeG", 0, 1);
39+
controlP5.addSlider("sizeB", 0, 1).linebreak();
40+
}
41+
42+
public void draw() {
43+
background(0);
44+
45+
if (enabled) {
46+
shader(badPrint);
47+
48+
badPrint.set("Scale", scaleR, scaleG, scaleB);
49+
badPrint.set("Offset", offsetR, offsetG, offsetB);
50+
badPrint.set("Register", registerR, registerG, registerB);
51+
badPrint.set("Size", sizeR, sizeG, sizeB);
52+
} else {
53+
resetShader();
54+
}
55+
56+
noStroke();
57+
pointLight(204, 204, 204, 1000, 1000, 1000);
58+
59+
pushMatrix();
60+
translate(width/2, height/2);
61+
rotateX(frameCount * 0.01);
62+
rotateY(frameCount * 0.01);
63+
sphere(200);
64+
popMatrix();
65+
66+
hint(DISABLE_DEPTH_TEST);
67+
noLights();
68+
resetShader();
69+
controlP5.draw();
70+
hint(ENABLE_DEPTH_TEST);
71+
}
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
// Copyright (C) 2007 Dave Griffiths
2+
// Licence: GPLv2 (see COPYING)
3+
// Fluxus Shader Library
4+
// ---------------------
5+
// BadPrint NPR Shader
6+
// This shader tries to emulate the effect
7+
// of a bad printing process. Can be controlled
8+
// with different settings for RGB
9+
10+
#ifdef GL_ES
11+
precision mediump float;
12+
precision mediump int;
13+
#endif
14+
15+
uniform vec3 Scale;
16+
uniform vec3 Offset;
17+
uniform vec3 Register;
18+
uniform vec3 Size;
19+
20+
varying vec3 N;
21+
varying vec3 P;
22+
varying vec4 S;
23+
varying vec3 L;
24+
25+
void main() {
26+
vec3 l = normalize(L);
27+
vec3 n = normalize(N);
28+
vec2 p = S.xy;
29+
30+
vec2 sr = p * Size.r + Register.r;
31+
vec2 sg = p * Size.g + Register.g;
32+
vec2 sb = p * Size.b + Register.b;
33+
34+
float diffuse = dot(l,n);
35+
36+
float r = (sin(sr.x) + cos(sr.y)) * Scale.r + Offset.r + diffuse;
37+
float g = (sin(sg.x) + cos(sg.y)) * Scale.g + Offset.g + diffuse;
38+
float b = (sin(sb.x) + cos(sb.y)) * Scale.b + Offset.b + diffuse;
39+
40+
gl_FragColor = vec4(step(0.5, r), step(0.5, g), step(0.5, b), 1);
41+
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
// Copyright (C) 2007 Dave Griffiths
2+
// Licence: GPLv2 (see COPYING)
3+
// Fluxus Shader Library
4+
// ---------------------
5+
// BadPrint NPR Shader
6+
// This shader tries to emulate the effect
7+
// of a bad printing process. Can be controlled
8+
// with different settings for RGB
9+
10+
uniform mat4 projectionMatrix;
11+
uniform mat4 projmodelviewMatrix;
12+
uniform mat3 normalMatrix;
13+
14+
uniform vec4 lightPosition[8];
15+
16+
attribute vec4 inVertex;
17+
attribute vec3 inNormal;
18+
19+
varying vec3 N;
20+
varying vec3 P;
21+
varying vec4 S;
22+
varying vec3 L;
23+
24+
void main() {
25+
N = normalize(normalMatrix * inNormal);
26+
P = inVertex.xyz;
27+
gl_Position = projmodelviewMatrix * inVertex;
28+
L = vec3(lightPosition[0] - gl_Position);
29+
S = projectionMatrix * gl_Position;
30+
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
/**
2+
* Blur Filter
3+
*
4+
* Change the default shader to apply a simple, custom blur filter.
5+
*
6+
* Press the mouse to switch between the custom and default shader.
7+
*/
8+
9+
PShader blur;
10+
11+
void setup() {
12+
size(640, 360, P2D);
13+
blur = loadShader("blur.glsl");
14+
stroke(255, 0, 0);
15+
}
16+
17+
void draw() {
18+
filter(blur);
19+
rect(mouseX, mouseY, 150, 150);
20+
line(mouseX, mouseY, mouseX+150, mouseY+150);
21+
}
22+
23+
24+
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
#ifdef GL_ES
2+
precision mediump float;
3+
precision mediump int;
4+
#endif
5+
6+
uniform sampler2D textureSampler;
7+
uniform vec2 texcoordOffset;
8+
9+
varying vec4 vertColor;
10+
varying vec4 vertTexcoord;
11+
12+
#define KERNEL_SIZE 9
13+
14+
// Gaussian kernel
15+
// 1 2 1
16+
// 2 4 2
17+
// 1 2 1
18+
float kernel[KERNEL_SIZE];
19+
20+
vec2 offset[KERNEL_SIZE];
21+
22+
void main(void) {
23+
int i = 0;
24+
vec4 sum = vec4(0.0);
25+
26+
offset[0] = vec2(-texcoordOffset.s, -texcoordOffset.t);
27+
offset[1] = vec2(0.0, -texcoordOffset.t);
28+
offset[2] = vec2(texcoordOffset.s, -texcoordOffset.t);
29+
30+
offset[3] = vec2(-texcoordOffset.s, 0.0);
31+
offset[4] = vec2(0.0, 0.0);
32+
offset[5] = vec2(texcoordOffset.s, 0.0);
33+
34+
offset[6] = vec2(-texcoordOffset.s, texcoordOffset.t);
35+
offset[7] = vec2(0.0, texcoordOffset.t);
36+
offset[8] = vec2(texcoordOffset.s, texcoordOffset.t);
37+
38+
kernel[0] = 1.0/16.0; kernel[1] = 2.0/16.0; kernel[2] = 1.0/16.0;
39+
kernel[3] = 2.0/16.0; kernel[4] = 4.0/16.0; kernel[5] = 2.0/16.0;
40+
kernel[6] = 1.0/16.0; kernel[7] = 2.0/16.0; kernel[8] = 1.0/16.0;
41+
42+
for(i = 0; i < KERNEL_SIZE; i++) {
43+
vec4 tmp = texture2D(textureSampler, vertTexcoord.st + offset[i]);
44+
sum += tmp * kernel[i];
45+
}
46+
47+
gl_FragColor = vec4(sum.rgb, 1.0) * vertColor;
48+
}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
/**
2+
* Edge Detection
3+
*
4+
* Change the default shader to apply a simple, custom edge detection filter.
5+
*
6+
* Press the mouse to switch between the custom and default shader.
7+
*/
8+
9+
PShader edges;
10+
PImage img;
11+
boolean enabled = true;
12+
13+
void setup() {
14+
size(640, 360, P2D);
15+
img = loadImage("leaves.jpg");
16+
edges = loadShader("edges.glsl");
17+
}
18+
19+
void draw() {
20+
if (enabled == true) {
21+
shader(edges);
22+
}
23+
image(img, 0, 0);
24+
}
25+
26+
void mousePressed() {
27+
enabled = !enabled;
28+
if (!enabled == true) {
29+
resetShader();
30+
}
31+
}
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
#ifdef GL_ES
2+
precision mediump float;
3+
precision mediump int;
4+
#endif
5+
6+
uniform sampler2D textureSampler;
7+
uniform vec2 texcoordOffset;
8+
9+
varying vec4 vertColor;
10+
varying vec4 vertTexcoord;
11+
12+
#define KERNEL_SIZE 9
13+
14+
// Edge detection kernel
15+
// -1 -1 -1
16+
// -1 +8 -1
17+
// -1 -1 -1
18+
float kernel[KERNEL_SIZE];
19+
20+
vec2 offset[KERNEL_SIZE];
21+
22+
void main(void) {
23+
int i = 0;
24+
vec4 sum = vec4(0.0);
25+
26+
offset[0] = vec2(-texcoordOffset.s, -texcoordOffset.t);
27+
offset[1] = vec2(0.0, -texcoordOffset.t);
28+
offset[2] = vec2(texcoordOffset.s, -texcoordOffset.t);
29+
30+
offset[3] = vec2(-texcoordOffset.s, 0.0);
31+
offset[4] = vec2(0.0, 0.0);
32+
offset[5] = vec2(texcoordOffset.s, 0.0);
33+
34+
offset[6] = vec2(-texcoordOffset.s, texcoordOffset.t);
35+
offset[7] = vec2(0.0, texcoordOffset.t);
36+
offset[8] = vec2(texcoordOffset.s, texcoordOffset.t);
37+
38+
kernel[0] = -1.0; kernel[1] = -1.0; kernel[2] = -1.0;
39+
kernel[3] = -1.0; kernel[4] = 8.0; kernel[5] = -1.0;
40+
kernel[6] = -1.0; kernel[7] = -1.0; kernel[8] = -1.0;
41+
42+
for(i = 0; i < KERNEL_SIZE; i++) {
43+
vec4 tmp = texture2D(textureSampler, vertTexcoord.st + offset[i]);
44+
sum += tmp * kernel[i];
45+
}
46+
47+
gl_FragColor = vec4(sum.rgb, 1.0) * vertColor;
48+
}
42.2 KB
LoadingViewer requires iframe.
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
/**
2+
* Edge Filter
3+
*
4+
* Apply a custom shader to the filter() function to affect the geometry drawn to the screen.
5+
*
6+
* Press the mouse to turn the filter on and off.
7+
*/
8+
9+
PShader edges;
10+
boolean applyFilter = true;
11+
12+
void setup() {
13+
size(640, 360, P3D);
14+
edges = loadShader("edges.glsl");
15+
noStroke();
16+
}
17+
18+
void draw() {
19+
background(0);
20+
lights();
21+
22+
translate(width/2, height/2);
23+
pushMatrix();
24+
rotateX(frameCount * 0.01);
25+
rotateY(frameCount * 0.01);
26+
box(120);
27+
popMatrix();
28+
29+
if (applyFilter == true) {
30+
filter(edges);
31+
}
32+
33+
// The sphere doesn't have the edge detection applied
34+
// on it because it is drawn after filter() is called.
35+
rotateY(frameCount * 0.02);
36+
translate(150, 0);
37+
sphere(40);
38+
}
39+
40+
void mousePressed() {
41+
applyFilter = !applyFilter;
42+
}
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
#ifdef GL_ES
2+
precision mediump float;
3+
precision mediump int;
4+
#endif
5+
6+
uniform sampler2D textureSampler;
7+
uniform vec2 texcoordOffset;
8+
9+
varying vec4 vertColor;
10+
varying vec4 vertTexcoord;
11+
12+
#define KERNEL_SIZE 9
13+
14+
// Edge detection kernel
15+
// -1 -1 -1
16+
// -1 +8 -1
17+
// -1 -1 -1
18+
float kernel[KERNEL_SIZE];
19+
20+
vec2 offset[KERNEL_SIZE];
21+
22+
void main(void) {
23+
int i = 0;
24+
vec4 sum = vec4(0.0);
25+
26+
offset[0] = vec2(-texcoordOffset.s, -texcoordOffset.t);
27+
offset[1] = vec2(0.0, -texcoordOffset.t);
28+
offset[2] = vec2(texcoordOffset.s, -texcoordOffset.t);
29+
30+
offset[3] = vec2(-texcoordOffset.s, 0.0);
31+
offset[4] = vec2(0.0, 0.0);
32+
offset[5] = vec2(texcoordOffset.s, 0.0);
33+
34+
offset[6] = vec2(-texcoordOffset.s, texcoordOffset.t);
35+
offset[7] = vec2(0.0, texcoordOffset.t);
36+
offset[8] = vec2(texcoordOffset.s, texcoordOffset.t);
37+
38+
kernel[0] = -1.0; kernel[1] = -1.0; kernel[2] = -1.0;
39+
kernel[3] = -1.0; kernel[4] = 8.0; kernel[5] = -1.0;
40+
kernel[6] = -1.0; kernel[7] = -1.0; kernel[8] = -1.0;
41+
42+
for(i = 0; i < KERNEL_SIZE; i++) {
43+
vec4 tmp = texture2D(textureSampler, vertTexcoord.st + offset[i]);
44+
sum += tmp * kernel[i];
45+
}
46+
47+
gl_FragColor = vec4(sum.rgb, 1.0) * vertColor;
48+
}

0 commit comments

Comments
 (0)

Back | FazBrowse Home | New Git URL