Adding the shader examples

This commit is contained in:
Casey Reas
2012-08-31 17:13:27 +00:00
parent 8b1e862c35
commit 86d96c363d
25 changed files with 1128 additions and 0 deletions
@@ -0,0 +1,71 @@
// Bad-print shader. Adapted from rom Fluxus Shader Library:
// http://www.pawfal.org/index.php?page=FluxusHardwareShaderLibrary
import controlP5.*;
ControlP5 controlP5;
PShader badPrint;
boolean enabled = true;
float scaleR = 1.0, scaleG = 1.0, scaleB = 1.0;
float offsetR = 0.2, offsetG = 0.2, offsetB = 0.2;
float registerR = 0.2, registerG = 0.2, registerB = 0.2;
float sizeR = 0.1, sizeG = 0.2, sizeB = 0.1;
public void setup() {
size(800, 800, P3D);
noStroke();
fill(204);
badPrint = loadShader("BadPrintFrag.glsl", "BadPrintVert.glsl");
sphereDetail(60);
controlP5 = new ControlP5(this);
controlP5.addToggle("enabled").linebreak();
controlP5.addSlider("scaleR", 0, 1);
controlP5.addSlider("scaleG", 0, 1);
controlP5.addSlider("scaleB", 0, 1).linebreak();
controlP5.addSlider("offsetR", 0, 1);
controlP5.addSlider("offsetG", 0, 1);
controlP5.addSlider("offsetB", 0, 1).linebreak();
controlP5.addSlider("registerR", 0, 1);
controlP5.addSlider("registerG", 0, 1);
controlP5.addSlider("registerB", 0, 1).linebreak();
controlP5.addSlider("sizeR", 0, 1);
controlP5.addSlider("sizeG", 0, 1);
controlP5.addSlider("sizeB", 0, 1).linebreak();
}
public void draw() {
background(0);
if (enabled) {
shader(badPrint);
badPrint.set("Scale", scaleR, scaleG, scaleB);
badPrint.set("Offset", offsetR, offsetG, offsetB);
badPrint.set("Register", registerR, registerG, registerB);
badPrint.set("Size", sizeR, sizeG, sizeB);
} else {
resetShader();
}
noStroke();
pointLight(204, 204, 204, 1000, 1000, 1000);
pushMatrix();
translate(width/2, height/2);
rotateX(frameCount * 0.01);
rotateY(frameCount * 0.01);
sphere(200);
popMatrix();
hint(DISABLE_DEPTH_TEST);
noLights();
resetShader();
controlP5.draw();
hint(ENABLE_DEPTH_TEST);
}
@@ -0,0 +1,41 @@
// Copyright (C) 2007 Dave Griffiths
// Licence: GPLv2 (see COPYING)
// Fluxus Shader Library
// ---------------------
// BadPrint NPR Shader
// This shader tries to emulate the effect
// of a bad printing process. Can be controlled
// with different settings for RGB
#ifdef GL_ES
precision mediump float;
precision mediump int;
#endif
uniform vec3 Scale;
uniform vec3 Offset;
uniform vec3 Register;
uniform vec3 Size;
varying vec3 N;
varying vec3 P;
varying vec4 S;
varying vec3 L;
void main() {
vec3 l = normalize(L);
vec3 n = normalize(N);
vec2 p = S.xy;
vec2 sr = p * Size.r + Register.r;
vec2 sg = p * Size.g + Register.g;
vec2 sb = p * Size.b + Register.b;
float diffuse = dot(l,n);
float r = (sin(sr.x) + cos(sr.y)) * Scale.r + Offset.r + diffuse;
float g = (sin(sg.x) + cos(sg.y)) * Scale.g + Offset.g + diffuse;
float b = (sin(sb.x) + cos(sb.y)) * Scale.b + Offset.b + diffuse;
gl_FragColor = vec4(step(0.5, r), step(0.5, g), step(0.5, b), 1);
}
@@ -0,0 +1,30 @@
// Copyright (C) 2007 Dave Griffiths
// Licence: GPLv2 (see COPYING)
// Fluxus Shader Library
// ---------------------
// BadPrint NPR Shader
// This shader tries to emulate the effect
// of a bad printing process. Can be controlled
// with different settings for RGB
uniform mat4 projectionMatrix;
uniform mat4 projmodelviewMatrix;
uniform mat3 normalMatrix;
uniform vec4 lightPosition[8];
attribute vec4 inVertex;
attribute vec3 inNormal;
varying vec3 N;
varying vec3 P;
varying vec4 S;
varying vec3 L;
void main() {
N = normalize(normalMatrix * inNormal);
P = inVertex.xyz;
gl_Position = projmodelviewMatrix * inVertex;
L = vec3(lightPosition[0] - gl_Position);
S = projectionMatrix * gl_Position;
}