propane 0.8.0-java → 0.9.0-java
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +3 -1
- data/README.md +1 -1
- data/lib/propane/app.rb +56 -55
- data/lib/propane/creators/sketch_writer.rb +7 -3
- data/lib/propane/helper_methods.rb +40 -29
- data/lib/propane/runner.rb +3 -2
- data/lib/propane/version.rb +1 -1
- data/pom.rb +1 -1
- data/pom.xml +1 -1
- data/vendors/Rakefile +31 -1
- metadata +2 -59
- data/examples/data_path/Rakefile +0 -32
- data/examples/data_path/bw_shader.rb +0 -47
- data/examples/data_path/data/Texture01.jpg +0 -0
- data/examples/data_path/data/Texture02.jpg +0 -0
- data/examples/data_path/data/Univers45.vlw +0 -0
- data/examples/data_path/data/bwfrag.glsl +0 -23
- data/examples/data_path/data/displaceFrag.glsl +0 -8
- data/examples/data_path/data/displaceVert.glsl +0 -201
- data/examples/data_path/data/lachoy.jpg +0 -0
- data/examples/data_path/data/landscape.glsl +0 -352
- data/examples/data_path/data/monjori.glsl +0 -30
- data/examples/data_path/data/moon.jpg +0 -0
- data/examples/data_path/data/sea.jpg +0 -0
- data/examples/data_path/edge_detection.rb +0 -49
- data/examples/data_path/glsl_heightmap_noise.rb +0 -125
- data/examples/data_path/kinetic_type.rb +0 -79
- data/examples/data_path/landscape.rb +0 -34
- data/examples/data_path/linear_image.rb +0 -51
- data/examples/data_path/monjori.rb +0 -35
- data/examples/regular/Rakefile +0 -30
- data/examples/regular/arcball_box.rb +0 -28
- data/examples/regular/arcball_constrain.rb +0 -29
- data/examples/regular/bezier_playground.rb +0 -206
- data/examples/regular/circle_collision.rb +0 -118
- data/examples/regular/colors_two.rb +0 -60
- data/examples/regular/creating_colors.rb +0 -64
- data/examples/regular/drawolver.rb +0 -93
- data/examples/regular/elegant_ball.rb +0 -159
- data/examples/regular/empathy.rb +0 -80
- data/examples/regular/fern.rb +0 -57
- data/examples/regular/fibonacci_sphere.rb +0 -91
- data/examples/regular/flight_patterns.rb +0 -64
- data/examples/regular/fractions.rb +0 -32
- data/examples/regular/grapher.rb +0 -40
- data/examples/regular/gravity.rb +0 -120
- data/examples/regular/grey_circles.rb +0 -28
- data/examples/regular/jwishy.rb +0 -99
- data/examples/regular/letters.rb +0 -42
- data/examples/regular/lib/boundary.rb +0 -38
- data/examples/regular/lib/particle.rb +0 -77
- data/examples/regular/lib/particle_system.rb +0 -111
- data/examples/regular/lib/rain_drops.rb +0 -54
- data/examples/regular/liquidy.rb +0 -41
- data/examples/regular/mouse_button_demo.rb +0 -32
- data/examples/regular/polyhedrons.rb +0 -249
- data/examples/regular/raining.rb +0 -60
- data/examples/regular/ribbon_doodle.rb +0 -89
- data/examples/regular/select_file.rb +0 -32
- data/examples/regular/select_image.rb +0 -40
- data/examples/regular/slider_demo.rb +0 -61
- data/examples/regular/slider_example.rb +0 -53
- data/examples/regular/slider_simple.rb +0 -47
- data/examples/regular/tree.rb +0 -76
- data/examples/regular/vector_math.rb +0 -37
- data/examples/regular/words.rb +0 -41
- data/lib/propane/helpers/string_extra.rb +0 -45
- data/lib/propane/underscorer.rb +0 -19
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: propane
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.9.0
|
5
5
|
platform: java
|
6
6
|
authors:
|
7
7
|
- filib
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2016-08-
|
12
|
+
date: 2016-08-04 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: arcball
|
@@ -45,61 +45,6 @@ files:
|
|
45
45
|
- README.md
|
46
46
|
- Rakefile
|
47
47
|
- bin/propane
|
48
|
-
- examples/data_path/Rakefile
|
49
|
-
- examples/data_path/bw_shader.rb
|
50
|
-
- examples/data_path/data/Texture01.jpg
|
51
|
-
- examples/data_path/data/Texture02.jpg
|
52
|
-
- examples/data_path/data/Univers45.vlw
|
53
|
-
- examples/data_path/data/bwfrag.glsl
|
54
|
-
- examples/data_path/data/displaceFrag.glsl
|
55
|
-
- examples/data_path/data/displaceVert.glsl
|
56
|
-
- examples/data_path/data/lachoy.jpg
|
57
|
-
- examples/data_path/data/landscape.glsl
|
58
|
-
- examples/data_path/data/monjori.glsl
|
59
|
-
- examples/data_path/data/moon.jpg
|
60
|
-
- examples/data_path/data/sea.jpg
|
61
|
-
- examples/data_path/edge_detection.rb
|
62
|
-
- examples/data_path/glsl_heightmap_noise.rb
|
63
|
-
- examples/data_path/kinetic_type.rb
|
64
|
-
- examples/data_path/landscape.rb
|
65
|
-
- examples/data_path/linear_image.rb
|
66
|
-
- examples/data_path/monjori.rb
|
67
|
-
- examples/regular/Rakefile
|
68
|
-
- examples/regular/arcball_box.rb
|
69
|
-
- examples/regular/arcball_constrain.rb
|
70
|
-
- examples/regular/bezier_playground.rb
|
71
|
-
- examples/regular/circle_collision.rb
|
72
|
-
- examples/regular/colors_two.rb
|
73
|
-
- examples/regular/creating_colors.rb
|
74
|
-
- examples/regular/drawolver.rb
|
75
|
-
- examples/regular/elegant_ball.rb
|
76
|
-
- examples/regular/empathy.rb
|
77
|
-
- examples/regular/fern.rb
|
78
|
-
- examples/regular/fibonacci_sphere.rb
|
79
|
-
- examples/regular/flight_patterns.rb
|
80
|
-
- examples/regular/fractions.rb
|
81
|
-
- examples/regular/grapher.rb
|
82
|
-
- examples/regular/gravity.rb
|
83
|
-
- examples/regular/grey_circles.rb
|
84
|
-
- examples/regular/jwishy.rb
|
85
|
-
- examples/regular/letters.rb
|
86
|
-
- examples/regular/lib/boundary.rb
|
87
|
-
- examples/regular/lib/particle.rb
|
88
|
-
- examples/regular/lib/particle_system.rb
|
89
|
-
- examples/regular/lib/rain_drops.rb
|
90
|
-
- examples/regular/liquidy.rb
|
91
|
-
- examples/regular/mouse_button_demo.rb
|
92
|
-
- examples/regular/polyhedrons.rb
|
93
|
-
- examples/regular/raining.rb
|
94
|
-
- examples/regular/ribbon_doodle.rb
|
95
|
-
- examples/regular/select_file.rb
|
96
|
-
- examples/regular/select_image.rb
|
97
|
-
- examples/regular/slider_demo.rb
|
98
|
-
- examples/regular/slider_example.rb
|
99
|
-
- examples/regular/slider_simple.rb
|
100
|
-
- examples/regular/tree.rb
|
101
|
-
- examples/regular/vector_math.rb
|
102
|
-
- examples/regular/words.rb
|
103
48
|
- lib/PROCESSING_LICENSE.txt
|
104
49
|
- lib/core-2.2.1.jar
|
105
50
|
- lib/export.txt
|
@@ -115,10 +60,8 @@ files:
|
|
115
60
|
- lib/propane/creators/sketch_writer.rb
|
116
61
|
- lib/propane/helper_methods.rb
|
117
62
|
- lib/propane/helpers/numeric.rb
|
118
|
-
- lib/propane/helpers/string_extra.rb
|
119
63
|
- lib/propane/library_loader.rb
|
120
64
|
- lib/propane/runner.rb
|
121
|
-
- lib/propane/underscorer.rb
|
122
65
|
- lib/propane/version.rb
|
123
66
|
- library/boids/boids.rb
|
124
67
|
- library/control_panel/control_panel.rb
|
data/examples/data_path/Rakefile
DELETED
@@ -1,32 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
# frozen_string_literal: true
|
3
|
-
# Simple demo Rakefile to autorun samples in current directory
|
4
|
-
# NB: If using atom install build and build-rake packages to run from atom
|
5
|
-
|
6
|
-
SAMPLES_DIR = './'
|
7
|
-
|
8
|
-
desc 'run demo'
|
9
|
-
task default: [:demo]
|
10
|
-
|
11
|
-
desc 'demo'
|
12
|
-
task :demo do
|
13
|
-
samples_list.shuffle.each { |sample| run_sample sample }
|
14
|
-
end
|
15
|
-
|
16
|
-
def samples_list
|
17
|
-
files = []
|
18
|
-
Dir.chdir(SAMPLES_DIR)
|
19
|
-
Dir.glob('*.rb').each do |file|
|
20
|
-
files << File.join(SAMPLES_DIR, file)
|
21
|
-
end
|
22
|
-
return files
|
23
|
-
end
|
24
|
-
|
25
|
-
def run_sample(sample_name)
|
26
|
-
puts "Running #{sample_name}...quit to run next sample"
|
27
|
-
open("|jruby #{sample_name}", 'r') do |io|
|
28
|
-
while l = io.gets
|
29
|
-
puts(l.chop)
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|
@@ -1,47 +0,0 @@
|
|
1
|
-
#!/usr/bin/env jruby -v -W2
|
2
|
-
require 'propane'
|
3
|
-
|
4
|
-
class BwShader < Propane::App
|
5
|
-
# Texture from Jason Liebig's FLICKR collection of vintage labels and wrappers:
|
6
|
-
# http://www.flickr.com/photos/jasonliebigstuff/3739263136/in/photostream/
|
7
|
-
|
8
|
-
attr_reader :label, :can, :angle, :bw_shader
|
9
|
-
|
10
|
-
def setup
|
11
|
-
size(640, 360, P3D)
|
12
|
-
@label = load_image(File.expand_path('./data/lachoy.jpg'))
|
13
|
-
@can = create_can(100, 200, 32, label)
|
14
|
-
@bw_shader = load_shader(File.expand_path('./data/bwfrag.glsl'))
|
15
|
-
@angle = 0
|
16
|
-
end
|
17
|
-
|
18
|
-
def draw
|
19
|
-
background(0)
|
20
|
-
shader(bw_shader)
|
21
|
-
translate(width/2, height/2)
|
22
|
-
rotate_y(angle)
|
23
|
-
shape(can)
|
24
|
-
@angle += 0.01
|
25
|
-
end
|
26
|
-
|
27
|
-
def create_can(r, h, detail, tex)
|
28
|
-
texture_mode(NORMAL)
|
29
|
-
sh = create_shape
|
30
|
-
sh.begin_shape(QUAD_STRIP)
|
31
|
-
sh.no_stroke
|
32
|
-
sh.texture(tex)
|
33
|
-
(0..detail).each do |i|
|
34
|
-
angle = TAU / detail
|
35
|
-
x = sin(i * angle)
|
36
|
-
z = cos(i * angle)
|
37
|
-
u = i.to_f / detail
|
38
|
-
sh.normal(x, 0, z)
|
39
|
-
sh.vertex(x * r, -h/2, z * r, u, 0)
|
40
|
-
sh.vertex(x * r, +h/2, z * r, u, 1)
|
41
|
-
end
|
42
|
-
sh.end_shape
|
43
|
-
sh
|
44
|
-
end
|
45
|
-
end
|
46
|
-
|
47
|
-
BwShader.new title: 'Black & White Shader'
|
Binary file
|
Binary file
|
Binary file
|
@@ -1,23 +0,0 @@
|
|
1
|
-
#ifdef GL_ES
|
2
|
-
precision mediump float;
|
3
|
-
precision mediump int;
|
4
|
-
#endif
|
5
|
-
|
6
|
-
#define PROCESSING_TEXTURE_SHADER
|
7
|
-
|
8
|
-
uniform sampler2D texture;
|
9
|
-
|
10
|
-
varying vec4 vertColor;
|
11
|
-
varying vec4 vertTexCoord;
|
12
|
-
|
13
|
-
const vec4 lumcoeff = vec4(0.299, 0.587, 0.114, 0);
|
14
|
-
|
15
|
-
void main() {
|
16
|
-
vec4 col = texture2D(texture, vertTexCoord.st);
|
17
|
-
float lum = dot(col, lumcoeff);
|
18
|
-
if (0.5 < lum) {
|
19
|
-
gl_FragColor = vertColor;
|
20
|
-
} else {
|
21
|
-
gl_FragColor = vec4(0, 0, 0, 1);
|
22
|
-
}
|
23
|
-
}
|
@@ -1,201 +0,0 @@
|
|
1
|
-
|
2
|
-
#define PROCESSING_TEXLIGHT_SHADER
|
3
|
-
|
4
|
-
uniform mat4 modelview;
|
5
|
-
uniform mat4 transform;
|
6
|
-
uniform mat3 normalMatrix;
|
7
|
-
uniform mat4 texMatrix;
|
8
|
-
|
9
|
-
uniform int lightCount;
|
10
|
-
uniform vec4 lightPosition[8];
|
11
|
-
uniform vec3 lightNormal[8];
|
12
|
-
uniform vec3 lightAmbient[8];
|
13
|
-
uniform vec3 lightDiffuse[8];
|
14
|
-
uniform vec3 lightSpecular[8];
|
15
|
-
uniform vec3 lightFalloff[8];
|
16
|
-
uniform vec2 lightSpot[8];
|
17
|
-
|
18
|
-
attribute vec4 vertex;
|
19
|
-
attribute vec4 color;
|
20
|
-
attribute vec3 normal;
|
21
|
-
attribute vec2 texCoord;
|
22
|
-
|
23
|
-
attribute vec4 ambient;
|
24
|
-
attribute vec4 specular;
|
25
|
-
attribute vec4 emissive;
|
26
|
-
attribute float shininess;
|
27
|
-
|
28
|
-
varying vec4 vertColor;
|
29
|
-
varying vec4 vertTexCoord;
|
30
|
-
|
31
|
-
const float zero_float = 0.0;
|
32
|
-
const float one_float = 1.0;
|
33
|
-
const vec3 zero_vec3 = vec3(0);
|
34
|
-
|
35
|
-
uniform float displaceStrength;
|
36
|
-
uniform float time;
|
37
|
-
|
38
|
-
float falloffFactor(vec3 lightPos, vec3 vertPos, vec3 coeff) {
|
39
|
-
vec3 lpv = lightPos - vertPos;
|
40
|
-
vec3 dist = vec3(one_float);
|
41
|
-
dist.z = dot(lpv, lpv);
|
42
|
-
dist.y = sqrt(dist.z);
|
43
|
-
return one_float / dot(dist, coeff);
|
44
|
-
}
|
45
|
-
|
46
|
-
float spotFactor(vec3 lightPos, vec3 vertPos, vec3 lightNorm, float minCos, float spotExp) {
|
47
|
-
vec3 lpv = normalize(lightPos - vertPos);
|
48
|
-
vec3 nln = -one_float * lightNorm;
|
49
|
-
float spotCos = dot(nln, lpv);
|
50
|
-
return spotCos <= minCos ? zero_float : pow(spotCos, spotExp);
|
51
|
-
}
|
52
|
-
|
53
|
-
float lambertFactor(vec3 lightDir, vec3 vecNormal) {
|
54
|
-
return max(zero_float, dot(lightDir, vecNormal));
|
55
|
-
}
|
56
|
-
|
57
|
-
float blinnPhongFactor(vec3 lightDir, vec3 vertPos, vec3 vecNormal, float shine) {
|
58
|
-
vec3 np = normalize(vertPos);
|
59
|
-
vec3 ldp = normalize(lightDir - np);
|
60
|
-
return pow(max(zero_float, dot(ldp, vecNormal)), shine);
|
61
|
-
}
|
62
|
-
|
63
|
-
// Source code for GLSL Perlin noise courtesy of:
|
64
|
-
// https://github.com/ashima/webgl-noise/wiki
|
65
|
-
|
66
|
-
vec3 mod289(vec3 x) {
|
67
|
-
return x - floor(x * (1.0 / 289.0)) * 289.0;
|
68
|
-
}
|
69
|
-
|
70
|
-
vec2 mod289(vec2 x) {
|
71
|
-
return x - floor(x * (1.0 / 289.0)) * 289.0;
|
72
|
-
}
|
73
|
-
|
74
|
-
vec3 permute(vec3 x) {
|
75
|
-
return mod289(((x*34.0)+1.0)*x);
|
76
|
-
}
|
77
|
-
|
78
|
-
float snoise(vec2 v)
|
79
|
-
{
|
80
|
-
const vec4 C = vec4(0.211324865405187, // (3.0-sqrt(3.0))/6.0
|
81
|
-
0.366025403784439, // 0.5*(sqrt(3.0)-1.0)
|
82
|
-
-0.577350269189626, // -1.0 + 2.0 * C.x
|
83
|
-
0.024390243902439); // 1.0 / 41.0
|
84
|
-
// First corner
|
85
|
-
vec2 i = floor(v + dot(v, C.yy) );
|
86
|
-
vec2 x0 = v - i + dot(i, C.xx);
|
87
|
-
|
88
|
-
// Other corners
|
89
|
-
vec2 i1;
|
90
|
-
//i1.x = step( x0.y, x0.x ); // x0.x > x0.y ? 1.0 : 0.0
|
91
|
-
//i1.y = 1.0 - i1.x;
|
92
|
-
i1 = (x0.x > x0.y) ? vec2(1.0, 0.0) : vec2(0.0, 1.0);
|
93
|
-
// x0 = x0 - 0.0 + 0.0 * C.xx ;
|
94
|
-
// x1 = x0 - i1 + 1.0 * C.xx ;
|
95
|
-
// x2 = x0 - 1.0 + 2.0 * C.xx ;
|
96
|
-
vec4 x12 = x0.xyxy + C.xxzz;
|
97
|
-
x12.xy -= i1;
|
98
|
-
|
99
|
-
// Permutations
|
100
|
-
i = mod289(i); // Avoid truncation effects in permutation
|
101
|
-
vec3 p = permute( permute( i.y + vec3(0.0, i1.y, 1.0 ))
|
102
|
-
+ i.x + vec3(0.0, i1.x, 1.0 ));
|
103
|
-
|
104
|
-
vec3 m = max(0.5 - vec3(dot(x0,x0), dot(x12.xy,x12.xy), dot(x12.zw,x12.zw)), 0.0);
|
105
|
-
m = m*m ;
|
106
|
-
m = m*m ;
|
107
|
-
|
108
|
-
// Gradients: 41 points uniformly over a line, mapped onto a diamond.
|
109
|
-
// The ring size 17*17 = 289 is close to a multiple of 41 (41*7 = 287)
|
110
|
-
|
111
|
-
vec3 x = 2.0 * fract(p * C.www) - 1.0;
|
112
|
-
vec3 h = abs(x) - 0.5;
|
113
|
-
vec3 ox = floor(x + 0.5);
|
114
|
-
vec3 a0 = x - ox;
|
115
|
-
|
116
|
-
// Normalise gradients implicitly by scaling m
|
117
|
-
// Approximation of: m *= inversesqrt( a0*a0 + h*h );
|
118
|
-
m *= 1.79284291400159 - 0.85373472095314 * ( a0*a0 + h*h );
|
119
|
-
|
120
|
-
// Compute final noise value at P
|
121
|
-
vec3 g;
|
122
|
-
g.x = a0.x * x0.x + h.x * x0.y;
|
123
|
-
g.yz = a0.yz * x12.xz + h.yz * x12.yw;
|
124
|
-
return 130.0 * dot(m, g);
|
125
|
-
}
|
126
|
-
|
127
|
-
void main() {
|
128
|
-
// Calculating texture coordinates, with r and q set both to one
|
129
|
-
vertTexCoord = texMatrix * vec4(texCoord, 1.0, 1.0);
|
130
|
-
|
131
|
-
vec2 p = texCoord; // put coordinates into vec2 p for convenience
|
132
|
-
p.x += time; // add time to make the noise and the subsequent displacement move
|
133
|
-
float df = snoise( p ); // create displacement float value from shader-based 2D Perlin noise
|
134
|
-
vec4 newVertexPos = vertex + vec4(normal * df * displaceStrength, 0.0); // regular vertex position + direction * displacementMap * displaceStrength
|
135
|
-
|
136
|
-
// Vertex in clip coordinates
|
137
|
-
gl_Position = transform * newVertexPos;
|
138
|
-
|
139
|
-
// Vertex in eye coordinates
|
140
|
-
vec3 ecVertex = vec3(modelview * vertex);
|
141
|
-
|
142
|
-
// Normal vector in eye coordinates
|
143
|
-
vec3 ecNormal = normalize(normalMatrix * normal);
|
144
|
-
|
145
|
-
if (dot(-one_float * ecVertex, ecNormal) < zero_float) {
|
146
|
-
// If normal is away from camera, choose its opposite.
|
147
|
-
// If we add backface culling, this will be backfacing
|
148
|
-
ecNormal *= -one_float;
|
149
|
-
}
|
150
|
-
|
151
|
-
// Light calculations
|
152
|
-
vec3 totalAmbient = vec3(0, 0, 0);
|
153
|
-
vec3 totalDiffuse = vec3(0, 0, 0);
|
154
|
-
vec3 totalSpecular = vec3(0, 0, 0);
|
155
|
-
for (int i = 0; i < 8; i++) {
|
156
|
-
if (lightCount == i) break;
|
157
|
-
|
158
|
-
vec3 lightPos = lightPosition[i].xyz;
|
159
|
-
bool isDir = zero_float < lightPosition[i].w;
|
160
|
-
float spotCos = lightSpot[i].x;
|
161
|
-
float spotExp = lightSpot[i].y;
|
162
|
-
|
163
|
-
vec3 lightDir;
|
164
|
-
float falloff;
|
165
|
-
float spotf;
|
166
|
-
|
167
|
-
if (isDir) {
|
168
|
-
falloff = one_float;
|
169
|
-
lightDir = -one_float * lightNormal[i];
|
170
|
-
} else {
|
171
|
-
falloff = falloffFactor(lightPos, ecVertex, lightFalloff[i]);
|
172
|
-
lightDir = normalize(lightPos - ecVertex);
|
173
|
-
}
|
174
|
-
|
175
|
-
spotf = spotExp > zero_float ? spotFactor(lightPos, ecVertex, lightNormal[i],
|
176
|
-
spotCos, spotExp)
|
177
|
-
: one_float;
|
178
|
-
|
179
|
-
if (any(greaterThan(lightAmbient[i], zero_vec3))) {
|
180
|
-
totalAmbient += lightAmbient[i] * falloff;
|
181
|
-
}
|
182
|
-
|
183
|
-
if (any(greaterThan(lightDiffuse[i], zero_vec3))) {
|
184
|
-
totalDiffuse += lightDiffuse[i] * falloff * spotf *
|
185
|
-
lambertFactor(lightDir, ecNormal);
|
186
|
-
}
|
187
|
-
|
188
|
-
if (any(greaterThan(lightSpecular[i], zero_vec3))) {
|
189
|
-
totalSpecular += lightSpecular[i] * falloff * spotf *
|
190
|
-
blinnPhongFactor(lightDir, ecVertex, ecNormal, shininess);
|
191
|
-
}
|
192
|
-
}
|
193
|
-
|
194
|
-
// Calculating final color as result of all lights (plus emissive term).
|
195
|
-
// Transparency is determined exclusively by the diffuse component.
|
196
|
-
vertColor = vec4(totalAmbient, 0) * ambient +
|
197
|
-
vec4(totalDiffuse, 1) * color +
|
198
|
-
vec4(totalSpecular, 0) * specular +
|
199
|
-
vec4(emissive.rgb, 0);
|
200
|
-
|
201
|
-
}
|
Binary file
|
@@ -1,352 +0,0 @@
|
|
1
|
-
// Elevated shader
|
2
|
-
// https://www.shadertoy.com/view/MdX3Rr by inigo quilez
|
3
|
-
|
4
|
-
// Created by inigo quilez - iq/2013
|
5
|
-
// License Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License.
|
6
|
-
|
7
|
-
// Processing port by Raphaël de Courville.
|
8
|
-
|
9
|
-
#ifdef GL_ES
|
10
|
-
precision highp float;
|
11
|
-
#endif
|
12
|
-
|
13
|
-
// Type of shader expected by Processing
|
14
|
-
#define PROCESSING_COLOR_SHADER
|
15
|
-
|
16
|
-
// Processing specific input
|
17
|
-
uniform float time;
|
18
|
-
uniform vec2 resolution;
|
19
|
-
uniform vec2 mouse;
|
20
|
-
|
21
|
-
// Layer between Processing and Shadertoy uniforms
|
22
|
-
vec3 iResolution = vec3(resolution,0.0);
|
23
|
-
float iGlobalTime = time;
|
24
|
-
vec4 iMouse = vec4(mouse,0.0,0.0); // zw would normally be the click status
|
25
|
-
|
26
|
-
// ------- Below is the unmodified Shadertoy code ----------
|
27
|
-
// Created by inigo quilez - iq/2013
|
28
|
-
// License Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License.
|
29
|
-
|
30
|
-
//stereo thanks to Croqueteer
|
31
|
-
//#define STEREO
|
32
|
-
|
33
|
-
mat3 m = mat3( 0.00, 0.80, 0.60,
|
34
|
-
-0.80, 0.36, -0.48,
|
35
|
-
-0.60, -0.48, 0.64 );
|
36
|
-
|
37
|
-
float hash( float n )
|
38
|
-
{
|
39
|
-
return fract(sin(n)*43758.5453123);
|
40
|
-
}
|
41
|
-
|
42
|
-
|
43
|
-
float noise( in vec3 x )
|
44
|
-
{
|
45
|
-
vec3 p = floor(x);
|
46
|
-
vec3 f = fract(x);
|
47
|
-
|
48
|
-
f = f*f*(3.0-2.0*f);
|
49
|
-
|
50
|
-
float n = p.x + p.y*57.0 + 113.0*p.z;
|
51
|
-
|
52
|
-
float res = mix(mix(mix( hash(n+ 0.0), hash(n+ 1.0),f.x),
|
53
|
-
mix( hash(n+ 57.0), hash(n+ 58.0),f.x),f.y),
|
54
|
-
mix(mix( hash(n+113.0), hash(n+114.0),f.x),
|
55
|
-
mix( hash(n+170.0), hash(n+171.0),f.x),f.y),f.z);
|
56
|
-
return res;
|
57
|
-
}
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
vec3 noised( in vec2 x )
|
63
|
-
{
|
64
|
-
vec2 p = floor(x);
|
65
|
-
vec2 f = fract(x);
|
66
|
-
|
67
|
-
vec2 u = f*f*(3.0-2.0*f);
|
68
|
-
|
69
|
-
float n = p.x + p.y*57.0;
|
70
|
-
|
71
|
-
float a = hash(n+ 0.0);
|
72
|
-
float b = hash(n+ 1.0);
|
73
|
-
float c = hash(n+ 57.0);
|
74
|
-
float d = hash(n+ 58.0);
|
75
|
-
return vec3(a+(b-a)*u.x+(c-a)*u.y+(a-b-c+d)*u.x*u.y,
|
76
|
-
30.0*f*f*(f*(f-2.0)+1.0)*(vec2(b-a,c-a)+(a-b-c+d)*u.yx));
|
77
|
-
|
78
|
-
}
|
79
|
-
|
80
|
-
float noise( in vec2 x )
|
81
|
-
{
|
82
|
-
vec2 p = floor(x);
|
83
|
-
vec2 f = fract(x);
|
84
|
-
|
85
|
-
f = f*f*(3.0-2.0*f);
|
86
|
-
|
87
|
-
float n = p.x + p.y*57.0;
|
88
|
-
|
89
|
-
float res = mix(mix( hash(n+ 0.0), hash(n+ 1.0),f.x),
|
90
|
-
mix( hash(n+ 57.0), hash(n+ 58.0),f.x),f.y);
|
91
|
-
|
92
|
-
return res;
|
93
|
-
}
|
94
|
-
|
95
|
-
float fbm( vec3 p )
|
96
|
-
{
|
97
|
-
float f = 0.0;
|
98
|
-
|
99
|
-
f += 0.5000*noise( p ); p = m*p*2.02;
|
100
|
-
f += 0.2500*noise( p ); p = m*p*2.03;
|
101
|
-
f += 0.1250*noise( p ); p = m*p*2.01;
|
102
|
-
f += 0.0625*noise( p );
|
103
|
-
|
104
|
-
return f/0.9375;
|
105
|
-
}
|
106
|
-
|
107
|
-
mat2 m2 = mat2(1.6,-1.2,1.2,1.6);
|
108
|
-
|
109
|
-
float fbm( vec2 p )
|
110
|
-
{
|
111
|
-
float f = 0.0;
|
112
|
-
|
113
|
-
f += 0.5000*noise( p ); p = m2*p*2.02;
|
114
|
-
f += 0.2500*noise( p ); p = m2*p*2.03;
|
115
|
-
f += 0.1250*noise( p ); p = m2*p*2.01;
|
116
|
-
f += 0.0625*noise( p );
|
117
|
-
|
118
|
-
return f/0.9375;
|
119
|
-
}
|
120
|
-
|
121
|
-
float terrain( in vec2 x )
|
122
|
-
{
|
123
|
-
vec2 p = x*0.003;
|
124
|
-
float a = 0.0;
|
125
|
-
float b = 1.0;
|
126
|
-
vec2 d = vec2(0.0);
|
127
|
-
for(int i=0;i<5; i++)
|
128
|
-
{
|
129
|
-
vec3 n = noised(p);
|
130
|
-
d += n.yz;
|
131
|
-
a += b*n.x/(1.0+dot(d,d));
|
132
|
-
b *= 0.5;
|
133
|
-
p=mat2(1.6,-1.2,1.2,1.6)*p;
|
134
|
-
}
|
135
|
-
|
136
|
-
return 140.0*a;
|
137
|
-
}
|
138
|
-
|
139
|
-
float terrain2( in vec2 x )
|
140
|
-
{
|
141
|
-
vec2 p = x*0.003;
|
142
|
-
float a = 0.0;
|
143
|
-
float b = 1.0;
|
144
|
-
vec2 d = vec2(0.0);
|
145
|
-
for(int i=0;i<14; i++)
|
146
|
-
{
|
147
|
-
vec3 n = noised(p);
|
148
|
-
d += n.yz;
|
149
|
-
a += b*n.x/(1.0+dot(d,d));
|
150
|
-
b *= 0.5;
|
151
|
-
p=m2*p;
|
152
|
-
}
|
153
|
-
|
154
|
-
return 140.0*a;
|
155
|
-
}
|
156
|
-
|
157
|
-
|
158
|
-
float map( in vec3 p )
|
159
|
-
{
|
160
|
-
float h = terrain(p.xz);
|
161
|
-
|
162
|
-
float ss = 0.03;
|
163
|
-
float hh = h*ss;
|
164
|
-
float fh = fract(hh);
|
165
|
-
float ih = floor(hh);
|
166
|
-
fh = mix( sqrt(fh), fh, smoothstep(50.0,140.0,h) );
|
167
|
-
h = (ih+fh)/ss;
|
168
|
-
|
169
|
-
return p.y - h;
|
170
|
-
}
|
171
|
-
|
172
|
-
float map2( in vec3 p )
|
173
|
-
{
|
174
|
-
float h = terrain2(p.xz);
|
175
|
-
|
176
|
-
|
177
|
-
float ss = 0.03;
|
178
|
-
float hh = h*ss;
|
179
|
-
float fh = fract(hh);
|
180
|
-
float ih = floor(hh);
|
181
|
-
fh = mix( sqrt(fh), fh, smoothstep(50.0,140.0,h) );
|
182
|
-
h = (ih+fh)/ss;
|
183
|
-
|
184
|
-
return p.y - h;
|
185
|
-
}
|
186
|
-
|
187
|
-
bool jinteresct(in vec3 rO, in vec3 rD, out float resT )
|
188
|
-
{
|
189
|
-
float h = 0.0;
|
190
|
-
float t = 0.0;
|
191
|
-
for( int j=0; j<120; j++ )
|
192
|
-
{
|
193
|
-
//if( t>2000.0 ) break;
|
194
|
-
|
195
|
-
vec3 p = rO + t*rD;
|
196
|
-
if( p.y>300.0 ) break;
|
197
|
-
h = map( p );
|
198
|
-
|
199
|
-
if( h<0.1 )
|
200
|
-
{
|
201
|
-
resT = t;
|
202
|
-
return true;
|
203
|
-
}
|
204
|
-
t += max(0.1,0.5*h);
|
205
|
-
|
206
|
-
}
|
207
|
-
|
208
|
-
if( h<5.0 )
|
209
|
-
{
|
210
|
-
resT = t;
|
211
|
-
return true;
|
212
|
-
}
|
213
|
-
return false;
|
214
|
-
}
|
215
|
-
|
216
|
-
float sinteresct(in vec3 rO, in vec3 rD )
|
217
|
-
{
|
218
|
-
float res = 1.0;
|
219
|
-
float t = 0.0;
|
220
|
-
for( int j=0; j<50; j++ )
|
221
|
-
{
|
222
|
-
//if( t>1000.0 ) break;
|
223
|
-
vec3 p = rO + t*rD;
|
224
|
-
|
225
|
-
float h = map( p );
|
226
|
-
|
227
|
-
if( h<0.1 )
|
228
|
-
{
|
229
|
-
return 0.0;
|
230
|
-
}
|
231
|
-
res = min( res, 16.0*h/t );
|
232
|
-
t += h;
|
233
|
-
|
234
|
-
}
|
235
|
-
|
236
|
-
return clamp( res, 0.0, 1.0 );
|
237
|
-
}
|
238
|
-
|
239
|
-
vec3 calcNormal( in vec3 pos, float t )
|
240
|
-
{
|
241
|
-
float e = 0.001;
|
242
|
-
e = 0.001*t;
|
243
|
-
vec3 eps = vec3(e,0.0,0.0);
|
244
|
-
vec3 nor;
|
245
|
-
nor.x = map2(pos+eps.xyy) - map2(pos-eps.xyy);
|
246
|
-
nor.y = map2(pos+eps.yxy) - map2(pos-eps.yxy);
|
247
|
-
nor.z = map2(pos+eps.yyx) - map2(pos-eps.yyx);
|
248
|
-
return normalize(nor);
|
249
|
-
}
|
250
|
-
|
251
|
-
vec3 camPath( float time )
|
252
|
-
{
|
253
|
-
vec2 p = 600.0*vec2( cos(1.4+0.37*time),
|
254
|
-
cos(3.2+0.31*time) );
|
255
|
-
|
256
|
-
return vec3( p.x, 0.0, p.y );
|
257
|
-
}
|
258
|
-
|
259
|
-
void main(void)
|
260
|
-
{
|
261
|
-
vec2 xy = -1.0 + 2.0*gl_FragCoord.xy / iResolution.xy;
|
262
|
-
|
263
|
-
vec2 s = xy*vec2(1.75,1.0);
|
264
|
-
|
265
|
-
#ifdef STEREO
|
266
|
-
float isCyan = mod(gl_FragCoord.x + mod(gl_FragCoord.y,2.0),2.0);
|
267
|
-
#endif
|
268
|
-
|
269
|
-
float time = iGlobalTime*.15;
|
270
|
-
|
271
|
-
vec3 light1 = normalize( vec3( 0.4, 0.22, 0.6 ) );
|
272
|
-
vec3 light2 = vec3( -0.707, 0.000, -0.707 );
|
273
|
-
|
274
|
-
|
275
|
-
vec3 campos = camPath( time );
|
276
|
-
vec3 camtar = camPath( time + 3.0 );
|
277
|
-
campos.y = terrain( campos.xz ) + 15.0;
|
278
|
-
camtar.y = campos.y*0.5;
|
279
|
-
|
280
|
-
float roll = 0.1*cos(0.1*time);
|
281
|
-
vec3 cw = normalize(camtar-campos);
|
282
|
-
vec3 cp = vec3(sin(roll), cos(roll),0.0);
|
283
|
-
vec3 cu = normalize(cross(cw,cp));
|
284
|
-
vec3 cv = normalize(cross(cu,cw));
|
285
|
-
vec3 rd = normalize( s.x*cu + s.y*cv + 1.6*cw );
|
286
|
-
|
287
|
-
#ifdef STEREO
|
288
|
-
campos += 2.0*cu*isCyan; // move camera to the right - the rd vector is still good
|
289
|
-
#endif
|
290
|
-
|
291
|
-
float sundot = clamp(dot(rd,light1),0.0,1.0);
|
292
|
-
vec3 col;
|
293
|
-
float t;
|
294
|
-
if( !jinteresct(campos,rd,t) )
|
295
|
-
{
|
296
|
-
col = 0.9*vec3(0.97,.99,1.0)*(1.0-0.3*rd.y);
|
297
|
-
col += 0.2*vec3(0.8,0.7,0.5)*pow( sundot, 4.0 );
|
298
|
-
}
|
299
|
-
else
|
300
|
-
{
|
301
|
-
vec3 pos = campos + t*rd;
|
302
|
-
|
303
|
-
vec3 nor = calcNormal( pos, t );
|
304
|
-
|
305
|
-
float dif1 = clamp( dot( light1, nor ), 0.0, 1.0 );
|
306
|
-
float dif2 = clamp( 0.2 + 0.8*dot( light2, nor ), 0.0, 1.0 );
|
307
|
-
float sh = 1.0;
|
308
|
-
if( dif1>0.001 )
|
309
|
-
sh = sinteresct(pos+light1*20.0,light1);
|
310
|
-
|
311
|
-
vec3 dif1v = vec3(dif1);
|
312
|
-
dif1v *= vec3( sh, sh*sh*0.5+0.5*sh, sh*sh );
|
313
|
-
|
314
|
-
float r = noise( 7.0*pos.xz );
|
315
|
-
|
316
|
-
col = (r*0.25+0.75)*0.9*mix( vec3(0.10,0.05,0.03), vec3(0.13,0.10,0.08), clamp(terrain2( vec2(pos.x,pos.y*48.0))/200.0,0.0,1.0) );
|
317
|
-
col = mix( col, 0.17*vec3(0.5,.23,0.04)*(0.50+0.50*r),smoothstep(0.70,0.9,nor.y) );
|
318
|
-
col = mix( col, 0.10*vec3(0.2,.30,0.00)*(0.25+0.75*r),smoothstep(0.95,1.0,nor.y) );
|
319
|
-
col *= 0.75;
|
320
|
-
// snow
|
321
|
-
#if 1
|
322
|
-
float h = smoothstep(55.0,80.0,pos.y + 25.0*fbm(0.01*pos.xz) );
|
323
|
-
float e = smoothstep(1.0-0.5*h,1.0-0.1*h,nor.y);
|
324
|
-
float o = 0.3 + 0.7*smoothstep(0.0,0.1,nor.x+h*h);
|
325
|
-
float s = h*e*o;
|
326
|
-
s = smoothstep( 0.1, 0.9, s );
|
327
|
-
col = mix( col, 0.4*vec3(0.6,0.65,0.7), s );
|
328
|
-
#endif
|
329
|
-
|
330
|
-
|
331
|
-
vec3 brdf = 2.0*vec3(0.17,0.19,0.20)*clamp(nor.y,0.0,1.0);
|
332
|
-
brdf += 6.0*vec3(1.00,0.95,0.80)*dif1v;
|
333
|
-
brdf += 2.0*vec3(0.20,0.20,0.20)*dif2;
|
334
|
-
|
335
|
-
col *= brdf;
|
336
|
-
|
337
|
-
float fo = 1.0-exp(-pow(0.0015*t,1.5));
|
338
|
-
vec3 fco = vec3(0.7) + 0.6*vec3(0.8,0.7,0.5)*pow( sundot, 4.0 );
|
339
|
-
col = mix( col, fco, fo );
|
340
|
-
}
|
341
|
-
|
342
|
-
col = sqrt(col);
|
343
|
-
|
344
|
-
vec2 uv = xy*0.5+0.5;
|
345
|
-
col *= 0.7 + 0.3*pow(16.0*uv.x*uv.y*(1.0-uv.x)*(1.0-uv.y),0.1);
|
346
|
-
|
347
|
-
#ifdef STEREO
|
348
|
-
col *= vec3( isCyan, 1.0-isCyan, 1.0-isCyan );
|
349
|
-
#endif
|
350
|
-
|
351
|
-
gl_FragColor=vec4(col,1.0);
|
352
|
-
}
|