Sync of all the shaders from upstream + LoadFontData did not match anymore with C and crashed on MacOS
This commit is contained in:
parent
21d83c60a9
commit
7cd46c491f
82 changed files with 767 additions and 753 deletions
|
|
@ -41,7 +41,7 @@ public class FontSdf
|
||||||
|
|
||||||
// Loading font data from memory data
|
// Loading font data from memory data
|
||||||
// Parameters > font size: 16, no chars array provided (0), chars count: 95 (autogenerate chars array)
|
// Parameters > font size: 16, no chars array provided (0), chars count: 95 (autogenerate chars array)
|
||||||
fontDefault.Glyphs = LoadFontData(fileData, (int)fileSize, 16, null, 95, FontType.Default);
|
fontDefault.Glyphs = LoadFontData(fileData, (int)fileSize, 16, null, 95, FontType.Default, &fontDefault.GlyphCount);
|
||||||
// Parameters > chars count: 95, font size: 16, chars padding in image: 4 px, pack method: 0 (default)
|
// Parameters > chars count: 95, font size: 16, chars padding in image: 4 px, pack method: 0 (default)
|
||||||
Image atlas = GenImageFontAtlas(fontDefault.Glyphs, &fontDefault.Recs, 95, 16, 4, 0);
|
Image atlas = GenImageFontAtlas(fontDefault.Glyphs, &fontDefault.Recs, 95, 16, 4, 0);
|
||||||
fontDefault.Texture = LoadTextureFromImage(atlas);
|
fontDefault.Texture = LoadTextureFromImage(atlas);
|
||||||
|
|
@ -52,7 +52,7 @@ public class FontSdf
|
||||||
fontSDF.BaseSize = 16;
|
fontSDF.BaseSize = 16;
|
||||||
fontSDF.GlyphCount = 95;
|
fontSDF.GlyphCount = 95;
|
||||||
// Parameters > font size: 16, no chars array provided (0), chars count: 0 (defaults to 95)
|
// Parameters > font size: 16, no chars array provided (0), chars count: 0 (defaults to 95)
|
||||||
fontSDF.Glyphs = LoadFontData(fileData, (int)fileSize, 16, null, 0, FontType.Sdf);
|
fontSDF.Glyphs = LoadFontData(fileData, (int)fileSize, 16, null, 0, FontType.Sdf, &fontDefault.GlyphCount);
|
||||||
// Parameters > chars count: 95, font size: 16, chars padding in image: 0 px, pack method: 1 (Skyline algorythm)
|
// Parameters > chars count: 95, font size: 16, chars padding in image: 0 px, pack method: 1 (Skyline algorythm)
|
||||||
atlas = GenImageFontAtlas(fontSDF.Glyphs, &fontSDF.Recs, 95, 16, 0, 1);
|
atlas = GenImageFontAtlas(fontSDF.Glyphs, &fontSDF.Recs, 95, 16, 0, 1);
|
||||||
fontSDF.Texture = LoadTextureFromImage(atlas);
|
fontSDF.Texture = LoadTextureFromImage(atlas);
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,7 @@ varying vec4 fragColor;
|
||||||
uniform sampler2D texture0;
|
uniform sampler2D texture0;
|
||||||
uniform vec4 colDiffuse;
|
uniform vec4 colDiffuse;
|
||||||
|
|
||||||
// NOTE: Add here your custom variables
|
// NOTE: Add your custom variables here
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -13,7 +13,7 @@ uniform mat4 mvp;
|
||||||
varying vec2 fragTexCoord;
|
varying vec2 fragTexCoord;
|
||||||
varying vec4 fragColor;
|
varying vec4 fragColor;
|
||||||
|
|
||||||
// NOTE: Add here your custom variables
|
// NOTE: Add your custom variables here
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -10,11 +10,11 @@ varying vec4 fragColor;
|
||||||
uniform sampler2D texture0;
|
uniform sampler2D texture0;
|
||||||
uniform vec4 colDiffuse;
|
uniform vec4 colDiffuse;
|
||||||
|
|
||||||
// NOTE: Add here your custom variables
|
// NOTE: Add your custom variables here
|
||||||
|
|
||||||
const vec2 size = vec2(800, 450); // render size
|
const vec2 size = vec2(800, 450); // Framebuffer size
|
||||||
const float samples = 5.0; // pixels per axis; higher = bigger glow, worse performance
|
const float samples = 5.0; // Pixels per axis; higher = bigger glow, worse performance
|
||||||
const float quality = 2.5; // lower = smaller glow, better quality
|
const float quality = 2.5; // Defines size factor: Lower = smaller glow, better quality
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,7 @@ varying vec4 fragColor;
|
||||||
uniform sampler2D texture0;
|
uniform sampler2D texture0;
|
||||||
uniform vec4 colDiffuse;
|
uniform vec4 colDiffuse;
|
||||||
|
|
||||||
// NOTE: Add here your custom variables
|
// NOTE: Add your custom variables here
|
||||||
|
|
||||||
// NOTE: Render size values must be passed from code
|
// NOTE: Render size values must be passed from code
|
||||||
const float renderWidth = 800.0;
|
const float renderWidth = 800.0;
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,7 @@ varying vec4 fragColor;
|
||||||
uniform sampler2D texture0;
|
uniform sampler2D texture0;
|
||||||
uniform vec4 colDiffuse;
|
uniform vec4 colDiffuse;
|
||||||
|
|
||||||
// NOTE: Add here your custom variables
|
// NOTE: Add your custom variables here
|
||||||
|
|
||||||
float hatchOffsetY = 5.0;
|
float hatchOffsetY = 5.0;
|
||||||
float lumThreshold01 = 0.9;
|
float lumThreshold01 = 0.9;
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,7 @@ varying vec4 fragColor;
|
||||||
uniform sampler2D texture0;
|
uniform sampler2D texture0;
|
||||||
uniform vec4 colDiffuse;
|
uniform vec4 colDiffuse;
|
||||||
|
|
||||||
// NOTE: Add here your custom variables
|
// NOTE: Add your custom variables here
|
||||||
|
|
||||||
// NOTE: Render size values must be passed from code
|
// NOTE: Render size values must be passed from code
|
||||||
const float renderWidth = 800.0;
|
const float renderWidth = 800.0;
|
||||||
|
|
|
||||||
|
|
@ -16,7 +16,7 @@ float angle = 0.0;
|
||||||
vec2 VectorRotateTime(vec2 v, float speed)
|
vec2 VectorRotateTime(vec2 v, float speed)
|
||||||
{
|
{
|
||||||
float time = uTime*speed;
|
float time = uTime*speed;
|
||||||
float localTime = fract(time); // The time domain this works on is 1 sec.
|
float localTime = fract(time); // The time domain this works on is 1 sec
|
||||||
|
|
||||||
if ((localTime >= 0.0) && (localTime < 0.25)) angle = 0.0;
|
if ((localTime >= 0.0) && (localTime < 0.25)) angle = 0.0;
|
||||||
else if ((localTime >= 0.25) && (localTime < 0.50)) angle = PI/4.0*sin(2.0*PI*localTime - PI/2.0);
|
else if ((localTime >= 0.25) && (localTime < 0.50)) angle = PI/4.0*sin(2.0*PI*localTime - PI/2.0);
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,7 @@ varying vec4 fragColor;
|
||||||
uniform sampler2D texture0;
|
uniform sampler2D texture0;
|
||||||
uniform vec4 colDiffuse;
|
uniform vec4 colDiffuse;
|
||||||
|
|
||||||
// NOTE: Add here your custom variables
|
// NOTE: Add your custom variables here
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -7,12 +7,12 @@ precision mediump float;
|
||||||
The Sieve of Eratosthenes -- a simple shader by ProfJski
|
The Sieve of Eratosthenes -- a simple shader by ProfJski
|
||||||
An early prime number sieve: https://en.wikipedia.org/wiki/Sieve_of_Eratosthenes
|
An early prime number sieve: https://en.wikipedia.org/wiki/Sieve_of_Eratosthenes
|
||||||
|
|
||||||
The screen is divided into a square grid of boxes, each representing an integer value.
|
The screen is divided into a square grid of boxes, each representing an integer value
|
||||||
Each integer is tested to see if it is a prime number. Primes are colored white.
|
Each integer is tested to see if it is a prime number. Primes are colored white
|
||||||
Non-primes are colored with a color that indicates the smallest factor which evenly divdes our integer.
|
Non-primes are colored with a color that indicates the smallest factor which evenly divdes our integer
|
||||||
|
|
||||||
You can change the scale variable to make a larger or smaller grid.
|
You can change the scale variable to make a larger or smaller grid
|
||||||
Total number of integers displayed = scale squared, so scale = 100 tests the first 10,000 integers.
|
Total number of integers displayed = scale squared, so scale = 100 tests the first 10,000 integers
|
||||||
|
|
||||||
WARNING: If you make scale too large, your GPU may bog down!
|
WARNING: If you make scale too large, your GPU may bog down!
|
||||||
|
|
||||||
|
|
@ -38,7 +38,7 @@ vec4 Colorizer(float counter, float maxSize)
|
||||||
void main()
|
void main()
|
||||||
{
|
{
|
||||||
vec4 color = vec4(1.0);
|
vec4 color = vec4(1.0);
|
||||||
float scale = 1000.0; // Makes 100x100 square grid. Change this variable to make a smaller or larger grid.
|
float scale = 1000.0; // Makes 100x100 square grid. Change this variable to make a smaller or larger grid
|
||||||
float value = scale*floor(fragTexCoord.y*scale) + floor(fragTexCoord.x*scale); // Group pixels into boxes representing integer values
|
float value = scale*floor(fragTexCoord.y*scale) + floor(fragTexCoord.x*scale); // Group pixels into boxes representing integer values
|
||||||
int valuei = int(value);
|
int valuei = int(value);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,7 @@ varying vec4 fragColor;
|
||||||
uniform sampler2D texture0;
|
uniform sampler2D texture0;
|
||||||
uniform vec4 colDiffuse;
|
uniform vec4 colDiffuse;
|
||||||
|
|
||||||
// NOTE: Add here your custom variables
|
// NOTE: Add your custom variables here
|
||||||
|
|
||||||
const float PI = 3.1415926535;
|
const float PI = 3.1415926535;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -12,7 +12,7 @@ varying vec3 fragNormal;
|
||||||
uniform sampler2D texture0;
|
uniform sampler2D texture0;
|
||||||
uniform vec4 colDiffuse;
|
uniform vec4 colDiffuse;
|
||||||
|
|
||||||
// NOTE: Add here your custom variables
|
// NOTE: Add your custom variables here
|
||||||
|
|
||||||
#define MAX_LIGHTS 4
|
#define MAX_LIGHTS 4
|
||||||
#define LIGHT_DIRECTIONAL 0
|
#define LIGHT_DIRECTIONAL 0
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,7 @@ varying vec4 fragColor;
|
||||||
uniform sampler2D texture0;
|
uniform sampler2D texture0;
|
||||||
uniform vec4 colDiffuse;
|
uniform vec4 colDiffuse;
|
||||||
|
|
||||||
// NOTE: Add here your custom variables
|
// NOTE: Add your custom variables here
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,7 @@
|
||||||
#version 100
|
#version 100
|
||||||
|
|
||||||
#extension GL_EXT_frag_depth : enable // Extension required for writing depth
|
#extension GL_EXT_frag_depth : enable // Extension required for writing depth
|
||||||
|
|
||||||
precision mediump float; // Precision required for OpenGL ES2 (WebGL)
|
precision mediump float; // Precision required for OpenGL ES2 (WebGL)
|
||||||
|
|
||||||
varying vec2 fragTexCoord;
|
varying vec2 fragTexCoord;
|
||||||
|
|
@ -11,6 +13,7 @@ uniform vec4 colDiffuse;
|
||||||
void main()
|
void main()
|
||||||
{
|
{
|
||||||
vec4 texelColor = texture2D(texture0, fragTexCoord);
|
vec4 texelColor = texture2D(texture0, fragTexCoord);
|
||||||
|
|
||||||
gl_FragColor = texelColor*colDiffuse*fragColor;
|
gl_FragColor = texelColor*colDiffuse*fragColor;
|
||||||
gl_FragDepthEXT = gl_FragCoord.z;
|
gl_FragDepthEXT = gl_FragCoord.z;
|
||||||
}
|
}
|
||||||
|
|
@ -1,8 +1,11 @@
|
||||||
#version 100
|
#version 100
|
||||||
|
|
||||||
#extension GL_EXT_frag_depth : enable //Extension required for writing depth
|
#extension GL_EXT_frag_depth : enable //Extension required for writing depth
|
||||||
#extension GL_OES_standard_derivatives : enable //Extension used for fwidth()
|
#extension GL_OES_standard_derivatives : enable //Extension used for fwidth()
|
||||||
precision mediump float; // Precision required for OpenGL ES2 (WebGL)
|
|
||||||
|
|
||||||
|
#define ZERO 0
|
||||||
|
|
||||||
|
precision mediump float; // Precision required for OpenGL ES2 (WebGL)
|
||||||
|
|
||||||
// Input vertex attributes (from vertex shader)
|
// Input vertex attributes (from vertex shader)
|
||||||
varying vec2 fragTexCoord;
|
varying vec2 fragTexCoord;
|
||||||
|
|
@ -17,15 +20,14 @@ uniform vec3 camPos;
|
||||||
uniform vec3 camDir;
|
uniform vec3 camDir;
|
||||||
uniform vec2 screenCenter;
|
uniform vec2 screenCenter;
|
||||||
|
|
||||||
#define ZERO 0
|
// SRC: https://learnopengl.com/Advanced-OpenGL/Depth-testing
|
||||||
|
float CalcDepth(in vec3 rd, in float Idist)
|
||||||
// https://learnopengl.com/Advanced-OpenGL/Depth-testing
|
{
|
||||||
float CalcDepth(in vec3 rd, in float Idist){
|
|
||||||
float local_z = dot(normalize(camDir),rd)*Idist;
|
float local_z = dot(normalize(camDir),rd)*Idist;
|
||||||
return (1.0/(local_z) - 1.0/0.01)/(1.0/1000.0 -1.0/0.01);
|
return (1.0/(local_z) - 1.0/0.01)/(1.0/1000.0 -1.0/0.01);
|
||||||
}
|
}
|
||||||
|
|
||||||
// https://iquilezles.org/articles/distfunctions/
|
// SRC: https://iquilezles.org/articles/distfunctions/
|
||||||
float sdHorseshoe(in vec3 p, in vec2 c, in float r, in float le, vec2 w)
|
float sdHorseshoe(in vec3 p, in vec2 c, in float r, in float le, vec2 w)
|
||||||
{
|
{
|
||||||
p.x = abs(p.x);
|
p.x = abs(p.x);
|
||||||
|
|
@ -57,11 +59,10 @@ float sdSixWayCutHollowSphere( vec3 p, float r, float h, float t )
|
||||||
|
|
||||||
float w = sqrt(r*r-h*h);
|
float w = sqrt(r*r-h*h);
|
||||||
|
|
||||||
return ((h*q.x<w*q.y) ? length(q-vec2(w,h)) :
|
return ((h*q.x<w*q.y) ? length(q-vec2(w,h)) : abs(length(q)-r)) - t;
|
||||||
abs(length(q)-r) ) - t;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// https://iquilezles.org/articles/boxfunctions
|
// SRC: https://iquilezles.org/articles/boxfunctions
|
||||||
vec2 iBox(in vec3 ro, in vec3 rd, in vec3 rad)
|
vec2 iBox(in vec3 ro, in vec3 rd, in vec3 rad)
|
||||||
{
|
{
|
||||||
vec3 m = 1.0/rd;
|
vec3 m = 1.0/rd;
|
||||||
|
|
@ -69,6 +70,7 @@ vec2 iBox( in vec3 ro, in vec3 rd, in vec3 rad )
|
||||||
vec3 k = abs(m)*rad;
|
vec3 k = abs(m)*rad;
|
||||||
vec3 t1 = -n - k;
|
vec3 t1 = -n - k;
|
||||||
vec3 t2 = -n + k;
|
vec3 t2 = -n + k;
|
||||||
|
|
||||||
return vec2(max(max(t1.x, t1.y), t1.z),
|
return vec2(max(max(t1.x, t1.y), t1.z),
|
||||||
min(min(t2.x, t2.y), t2.z));
|
min(min(t2.x, t2.y), t2.z));
|
||||||
}
|
}
|
||||||
|
|
@ -78,20 +80,23 @@ vec2 opU( vec2 d1, vec2 d2 )
|
||||||
return (d1.x<d2.x) ? d1 : d2;
|
return (d1.x<d2.x) ? d1 : d2;
|
||||||
}
|
}
|
||||||
|
|
||||||
vec2 map( in vec3 pos ){
|
vec2 map(in vec3 pos)
|
||||||
|
{
|
||||||
vec2 res = vec2(sdHorseshoe(pos-vec3(-1.0,0.08, 1.0), vec2(cos(1.3),sin(1.3)), 0.2, 0.3, vec2(0.03,0.5)), 11.5) ;
|
vec2 res = vec2(sdHorseshoe(pos-vec3(-1.0,0.08, 1.0), vec2(cos(1.3),sin(1.3)), 0.2, 0.3, vec2(0.03,0.5)), 11.5) ;
|
||||||
res = opU(res, vec2(sdSixWayCutHollowSphere(pos-vec3(0.0, 1.0, 0.0), 4.0, 3.5, 0.5), 4.5)) ;
|
res = opU(res, vec2(sdSixWayCutHollowSphere(pos-vec3(0.0, 1.0, 0.0), 4.0, 3.5, 0.5), 4.5)) ;
|
||||||
|
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
// https://www.shadertoy.com/view/Xds3zN
|
// SRC: https://www.shadertoy.com/view/Xds3zN
|
||||||
vec2 raycast( in vec3 ro, in vec3 rd ){
|
vec2 raycast(in vec3 ro, in vec3 rd)
|
||||||
|
{
|
||||||
vec2 res = vec2(-1.0,-1.0);
|
vec2 res = vec2(-1.0,-1.0);
|
||||||
|
|
||||||
float tmin = 1.0;
|
float tmin = 1.0;
|
||||||
float tmax = 20.0;
|
float tmax = 20.0;
|
||||||
|
|
||||||
// raytrace floor plane
|
// Raytrace floor plane
|
||||||
float tp1 = (-ro.y)/rd.y;
|
float tp1 = (-ro.y)/rd.y;
|
||||||
if (tp1>0.0)
|
if (tp1>0.0)
|
||||||
{
|
{
|
||||||
|
|
@ -253,7 +258,8 @@ vec4 render( in vec3 ro, in vec3 rd)
|
||||||
return vec4(vec3(clamp(col,0.0,1.0)),t);
|
return vec4(vec3(clamp(col,0.0,1.0)),t);
|
||||||
}
|
}
|
||||||
|
|
||||||
vec3 CalcRayDir(vec2 nCoord){
|
vec3 CalcRayDir(vec2 nCoord)
|
||||||
|
{
|
||||||
vec3 horizontal = normalize(cross(camDir,vec3(.0 , 1.0, .0)));
|
vec3 horizontal = normalize(cross(camDir,vec3(.0 , 1.0, .0)));
|
||||||
vec3 vertical = normalize(cross(horizontal,camDir));
|
vec3 vertical = normalize(cross(horizontal,camDir));
|
||||||
return normalize(camDir + horizontal*nCoord.x + vertical*nCoord.y);
|
return normalize(camDir + horizontal*nCoord.x + vertical*nCoord.y);
|
||||||
|
|
@ -283,6 +289,7 @@ void main()
|
||||||
color = res.xyz;
|
color = res.xyz;
|
||||||
depth = CalcDepth(rd,res.w);
|
depth = CalcDepth(rd,res.w);
|
||||||
}
|
}
|
||||||
|
|
||||||
gl_FragColor = vec4(color , 1.0);
|
gl_FragColor = vec4(color , 1.0);
|
||||||
gl_FragDepthEXT = depth;
|
gl_FragDepthEXT = depth;
|
||||||
}
|
}
|
||||||
|
|
@ -6,22 +6,19 @@ precision mediump float;
|
||||||
varying vec2 fragTexCoord;
|
varying vec2 fragTexCoord;
|
||||||
varying vec4 fragColor;
|
varying vec4 fragColor;
|
||||||
|
|
||||||
uniform vec2 screenDims; // Dimensions of the screen
|
|
||||||
uniform vec2 c; // c.x = real, c.y = imaginary component. Equation done is z^2 + c
|
uniform vec2 c; // c.x = real, c.y = imaginary component. Equation done is z^2 + c
|
||||||
uniform vec2 offset; // Offset of the scale.
|
uniform vec2 offset; // Offset of the scale
|
||||||
uniform float zoom; // Zoom of the scale.
|
uniform float zoom; // Zoom of the scale
|
||||||
|
|
||||||
// NOTE: Maximum number of shader for-loop iterations depend on GPU,
|
// NOTE: Maximum number of shader for-loop iterations depend on GPU,
|
||||||
// for example, on RasperryPi for this examply only supports up to 60
|
// for example, on RasperryPi for this examply only supports up to 60
|
||||||
const int MAX_ITERATIONS = 48; // Max iterations to do
|
const int maxIterations = 255; // Max iterations to do.
|
||||||
|
const float colorCycles = 1.0; // Number of times the color palette repeats.
|
||||||
|
|
||||||
// Square a complex number
|
// Square a complex number
|
||||||
vec2 ComplexSquare(vec2 z)
|
vec2 ComplexSquare(vec2 z)
|
||||||
{
|
{
|
||||||
return vec2(
|
return vec2(z.x*z.x - z.y*z.y, z.x*z.y*2.0);
|
||||||
z.x * z.x - z.y * z.y,
|
|
||||||
z.x * z.y * 2.0
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Convert Hue Saturation Value (HSV) color into RGB
|
// Convert Hue Saturation Value (HSV) color into RGB
|
||||||
|
|
@ -35,30 +32,32 @@ vec3 Hsv2rgb(vec3 c)
|
||||||
void main()
|
void main()
|
||||||
{
|
{
|
||||||
/**********************************************************************************************
|
/**********************************************************************************************
|
||||||
Julia sets use a function z^2 + c, where c is a constant.
|
Julia sets use a function z^2 + c, where c is a constant
|
||||||
This function is iterated until the nature of the point is determined.
|
This function is iterated until the nature of the point is determined
|
||||||
|
|
||||||
If the magnitude of the number becomes greater than 2, then from that point onward
|
If the magnitude of the number becomes greater than 2, then from that point onward
|
||||||
the number will get bigger and bigger, and will never get smaller (tends towards infinity).
|
the number will get bigger and bigger, and will never get smaller (tends towards infinity)
|
||||||
2^2 = 4, 4^2 = 8 and so on.
|
2^2 = 4, 4^2 = 8 and so on
|
||||||
So at 2 we stop iterating.
|
So at 2 we stop iterating
|
||||||
|
|
||||||
If the number is below 2, we keep iterating.
|
If the number is below 2, we keep iterating
|
||||||
But when do we stop iterating if the number is always below 2 (it converges)?
|
But when do we stop iterating if the number is always below 2 (it converges)?
|
||||||
That is what MAX_ITERATIONS is for.
|
That is what maxIterations is for
|
||||||
Then we can divide the iterations by the MAX_ITERATIONS value to get a normalized value that we can
|
Then we can divide the iterations by the maxIterations value to get a normalized value
|
||||||
then map to a color.
|
that we can then map to a color
|
||||||
|
|
||||||
We use dot product (z.x * z.x + z.y * z.y) to determine the magnitude (length) squared.
|
We use dot product (z.x*z.x + z.y*z.y) to determine the magnitude (length) squared
|
||||||
And once the magnitude squared is > 4, then magnitude > 2 is also true (saves computational power).
|
And once the magnitude squared is > 4, then magnitude > 2 is also true (saves computational power)
|
||||||
*************************************************************************************************/
|
*************************************************************************************************/
|
||||||
|
|
||||||
// The pixel coordinates are scaled so they are on the mandelbrot scale
|
// The pixel coordinates are scaled so they are on the mandelbrot scale
|
||||||
// NOTE: fragTexCoord already comes as normalized screen coordinates but offset must be normalized before scaling and zoom
|
// NOTE: fragTexCoord already comes as normalized screen coordinates but offset must be normalized before scaling and zoom
|
||||||
vec2 z = vec2((fragTexCoord.x + offset.x/screenDims.x)*2.5/zoom, (fragTexCoord.y + offset.y/screenDims.y)*1.5/zoom);
|
vec2 z = vec2((fragTexCoord.x - 0.5)*2.5, (fragTexCoord.y - 0.5)*1.5)/zoom;
|
||||||
|
z.x += offset.x;
|
||||||
|
z.y += offset.y;
|
||||||
|
|
||||||
int iter = 0;
|
int iter = 0;
|
||||||
for (int iterations = 0; iterations < 60; iterations++)
|
for (int iterations = 0; iterations < maxIterations; iterations++)
|
||||||
{
|
{
|
||||||
z = ComplexSquare(z) + c; // Iterate function
|
z = ComplexSquare(z) + c; // Iterate function
|
||||||
if (dot(z, z) > 4.0) break;
|
if (dot(z, z) > 4.0) break;
|
||||||
|
|
@ -66,18 +65,18 @@ void main()
|
||||||
iter = iterations;
|
iter = iterations;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Another few iterations decreases errors in the smoothing calculation.
|
// Another few iterations decreases errors in the smoothing calculation
|
||||||
// See http://linas.org/art-gallery/escape/escape.html for more information.
|
// See http://linas.org/art-gallery/escape/escape.html for more information
|
||||||
z = ComplexSquare(z) + c;
|
z = ComplexSquare(z) + c;
|
||||||
z = ComplexSquare(z) + c;
|
z = ComplexSquare(z) + c;
|
||||||
|
|
||||||
// This last part smooths the color (again see link above).
|
// This last part smooths the color (again see link above)
|
||||||
float smoothVal = float(iter) + 1.0 - (log(log(length(z)))/log(2.0));
|
float smoothVal = float(iter) + 1.0 - (log(log(length(z)))/log(2.0));
|
||||||
|
|
||||||
// Normalize the value so it is between 0 and 1.
|
// Normalize the value so it is between 0 and 1
|
||||||
float norm = smoothVal/float(MAX_ITERATIONS);
|
float norm = smoothVal/float(maxIterations);
|
||||||
|
|
||||||
// If in set, color black. 0.999 allows for some float accuracy error.
|
// If in set, color black. 0.999 allows for some float accuracy error
|
||||||
if (norm > 0.999) gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);
|
if (norm > 0.999) gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);
|
||||||
else gl_FragColor = vec4(Hsv2rgb(vec3(norm, 1.0, 1.0)), 1.0);
|
else gl_FragColor = vec4(Hsv2rgb(vec3(norm*colorCycles, 1.0, 1.0)), 1.0);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -12,18 +12,12 @@ varying vec3 fragNormal;
|
||||||
uniform sampler2D texture0;
|
uniform sampler2D texture0;
|
||||||
uniform vec4 colDiffuse;
|
uniform vec4 colDiffuse;
|
||||||
|
|
||||||
// NOTE: Add here your custom variables
|
// NOTE: Add your custom variables here
|
||||||
|
|
||||||
#define MAX_LIGHTS 4
|
#define MAX_LIGHTS 4
|
||||||
#define LIGHT_DIRECTIONAL 0
|
#define LIGHT_DIRECTIONAL 0
|
||||||
#define LIGHT_POINT 1
|
#define LIGHT_POINT 1
|
||||||
|
|
||||||
struct MaterialProperty {
|
|
||||||
vec3 color;
|
|
||||||
int useSampler;
|
|
||||||
sampler2D sampler;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct Light {
|
struct Light {
|
||||||
int enabled;
|
int enabled;
|
||||||
int type;
|
int type;
|
||||||
|
|
@ -46,6 +40,8 @@ void main()
|
||||||
vec3 viewD = normalize(viewPos - fragPosition);
|
vec3 viewD = normalize(viewPos - fragPosition);
|
||||||
vec3 specular = vec3(0.0);
|
vec3 specular = vec3(0.0);
|
||||||
|
|
||||||
|
vec4 tint = colDiffuse*fragColor;
|
||||||
|
|
||||||
// NOTE: Implement here your fragment shader code
|
// NOTE: Implement here your fragment shader code
|
||||||
|
|
||||||
for (int i = 0; i < MAX_LIGHTS; i++)
|
for (int i = 0; i < MAX_LIGHTS; i++)
|
||||||
|
|
@ -73,7 +69,7 @@ void main()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
vec4 finalColor = (texelColor*((colDiffuse + vec4(specular, 1.0))*vec4(lightDot, 1.0)));
|
vec4 finalColor = (texelColor*((tint + vec4(specular, 1.0))*vec4(lightDot, 1.0)));
|
||||||
finalColor += texelColor*(ambient/10.0);
|
finalColor += texelColor*(ambient/10.0);
|
||||||
|
|
||||||
// Gamma correction
|
// Gamma correction
|
||||||
|
|
|
||||||
|
|
@ -16,7 +16,7 @@ varying vec2 fragTexCoord;
|
||||||
varying vec4 fragColor;
|
varying vec4 fragColor;
|
||||||
varying vec3 fragNormal;
|
varying vec3 fragNormal;
|
||||||
|
|
||||||
// NOTE: Add here your custom variables
|
// NOTE: Add your custom variables here
|
||||||
|
|
||||||
// https://github.com/glslify/glsl-inverse
|
// https://github.com/glslify/glsl-inverse
|
||||||
mat3 inverse(mat3 m)
|
mat3 inverse(mat3 m)
|
||||||
|
|
|
||||||
|
|
@ -18,7 +18,7 @@ varying vec2 fragTexCoord;
|
||||||
varying vec4 fragColor;
|
varying vec4 fragColor;
|
||||||
varying vec3 fragNormal;
|
varying vec3 fragNormal;
|
||||||
|
|
||||||
// NOTE: Add here your custom variables
|
// NOTE: Add your custom variables here
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -12,7 +12,7 @@ uniform sampler2D mask;
|
||||||
uniform vec4 colDiffuse;
|
uniform vec4 colDiffuse;
|
||||||
uniform int frame;
|
uniform int frame;
|
||||||
|
|
||||||
// NOTE: Add here your custom variables
|
// NOTE: Add your custom variables here
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
precision mediump float;
|
precision mediump float;
|
||||||
|
|
||||||
const int colors = 8;
|
const int MAX_INDEXED_COLORS = 8;
|
||||||
|
|
||||||
// Input vertex attributes (from vertex shader)
|
// Input vertex attributes (from vertex shader)
|
||||||
varying vec2 fragTexCoord;
|
varying vec2 fragTexCoord;
|
||||||
|
|
@ -10,7 +10,8 @@ varying vec4 fragColor;
|
||||||
|
|
||||||
// Input uniform values
|
// Input uniform values
|
||||||
uniform sampler2D texture0;
|
uniform sampler2D texture0;
|
||||||
uniform ivec3 palette[colors];
|
uniform ivec3 palette[MAX_INDEXED_COLORS];
|
||||||
|
//uniform sampler2D palette; // Alternative to ivec3, palette provided as a 256x1 texture
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
{
|
{
|
||||||
|
|
@ -18,7 +19,7 @@ void main()
|
||||||
vec4 texelColor = texture2D(texture0, fragTexCoord)*fragColor;
|
vec4 texelColor = texture2D(texture0, fragTexCoord)*fragColor;
|
||||||
|
|
||||||
// Convert the (normalized) texel color RED component (GB would work, too)
|
// Convert the (normalized) texel color RED component (GB would work, too)
|
||||||
// to the palette index by scaling up from [0, 1] to [0, 255].
|
// to the palette index by scaling up from [0..1] to [0..255]
|
||||||
int index = int(texelColor.r*255.0);
|
int index = int(texelColor.r*255.0);
|
||||||
|
|
||||||
ivec3 color = ivec3(0);
|
ivec3 color = ivec3(0);
|
||||||
|
|
@ -34,8 +35,9 @@ void main()
|
||||||
else if (index == 6) color = palette[6];
|
else if (index == 6) color = palette[6];
|
||||||
else if (index == 7) color = palette[7];
|
else if (index == 7) color = palette[7];
|
||||||
|
|
||||||
|
//gl_FragColor = texture2D(palette, texelColor.xy); // Alternative to ivec3
|
||||||
|
|
||||||
// Calculate final fragment color. Note that the palette color components
|
// Calculate final fragment color. Note that the palette color components
|
||||||
// are defined in the range [0, 255] and need to be normalized to [0, 1]
|
// are defined in the range [0..255] and need to be normalized to [0..1]
|
||||||
// for OpenGL to work.
|
|
||||||
gl_FragColor = vec4(float(color.x)/255.0, float(color.y)/255.0, float(color.z)/255.0, texelColor.a);
|
gl_FragColor = vec4(float(color.x)/255.0, float(color.y)/255.0, float(color.z)/255.0, texelColor.a);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,7 @@ varying vec4 fragColor;
|
||||||
uniform sampler2D texture0;
|
uniform sampler2D texture0;
|
||||||
uniform vec4 colDiffuse;
|
uniform vec4 colDiffuse;
|
||||||
|
|
||||||
// NOTE: Add here your custom variables
|
// NOTE: Add your custom variables here
|
||||||
|
|
||||||
// NOTE: Render size values must be passed from code
|
// NOTE: Render size values must be passed from code
|
||||||
const float renderWidth = 800.0;
|
const float renderWidth = 800.0;
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,7 @@ varying vec4 fragColor;
|
||||||
uniform sampler2D texture0;
|
uniform sampler2D texture0;
|
||||||
uniform vec4 colDiffuse;
|
uniform vec4 colDiffuse;
|
||||||
|
|
||||||
// NOTE: Add here your custom variables
|
// NOTE: Add your custom variables here
|
||||||
|
|
||||||
float gamma = 0.6;
|
float gamma = 0.6;
|
||||||
float numColors = 8.0;
|
float numColors = 8.0;
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,7 @@ varying vec4 fragColor;
|
||||||
uniform sampler2D texture0;
|
uniform sampler2D texture0;
|
||||||
uniform vec4 colDiffuse;
|
uniform vec4 colDiffuse;
|
||||||
|
|
||||||
// NOTE: Add here your custom variables
|
// NOTE: Add your custom variables here
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,9 @@
|
||||||
#version 100
|
#version 100
|
||||||
|
|
||||||
precision mediump float;
|
|
||||||
|
|
||||||
#extension GL_OES_standard_derivatives : enable
|
#extension GL_OES_standard_derivatives : enable
|
||||||
|
|
||||||
|
precision mediump float;
|
||||||
|
|
||||||
// Input vertex attributes (from vertex shader)
|
// Input vertex attributes (from vertex shader)
|
||||||
varying vec2 fragTexCoord;
|
varying vec2 fragTexCoord;
|
||||||
varying vec4 fragColor;
|
varying vec4 fragColor;
|
||||||
|
|
@ -34,11 +34,11 @@ uniform vec2 resolution;
|
||||||
// SOFTWARE.
|
// SOFTWARE.
|
||||||
|
|
||||||
// A list of useful distance function to simple primitives, and an example on how to
|
// A list of useful distance function to simple primitives, and an example on how to
|
||||||
// do some interesting boolean operations, repetition and displacement.
|
// do some interesting boolean operations, repetition and displacement
|
||||||
//
|
//
|
||||||
// More info here: http://www.iquilezles.org/www/articles/distfunctions/distfunctions.htm
|
// More info here: http://www.iquilezles.org/www/articles/distfunctions/distfunctions.htm
|
||||||
|
|
||||||
#define AA 1 // make this 1 is your machine is too slow
|
#define AA 1 // make this 1 if your machine is too slow
|
||||||
|
|
||||||
//------------------------------------------------------------------
|
//------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,7 @@ varying vec4 fragColor;
|
||||||
uniform sampler2D texture0;
|
uniform sampler2D texture0;
|
||||||
uniform vec4 colDiffuse;
|
uniform vec4 colDiffuse;
|
||||||
|
|
||||||
// NOTE: Add here your custom variables
|
// NOTE: Add your custom variables here
|
||||||
|
|
||||||
float offset = 0.0;
|
float offset = 0.0;
|
||||||
float frequency = 450.0/3.0;
|
float frequency = 450.0/3.0;
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,7 @@ varying vec4 fragColor;
|
||||||
uniform sampler2D texture0;
|
uniform sampler2D texture0;
|
||||||
uniform vec4 colDiffuse;
|
uniform vec4 colDiffuse;
|
||||||
|
|
||||||
// NOTE: Add here your custom variables
|
// NOTE: Add your custom variables here
|
||||||
vec2 resolution = vec2(800.0, 450.0);
|
vec2 resolution = vec2(800.0, 450.0);
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,7 @@ varying vec4 fragColor;
|
||||||
uniform sampler2D texture0;
|
uniform sampler2D texture0;
|
||||||
uniform vec4 colDiffuse;
|
uniform vec4 colDiffuse;
|
||||||
|
|
||||||
// NOTE: Add here your custom variables
|
// NOTE: Add your custom variables here
|
||||||
|
|
||||||
// NOTE: Render size values should be passed from code
|
// NOTE: Render size values should be passed from code
|
||||||
const float renderWidth = 800.0;
|
const float renderWidth = 800.0;
|
||||||
|
|
@ -42,5 +42,5 @@ void main()
|
||||||
tc += center;
|
tc += center;
|
||||||
vec4 color = texture2D(texture0, tc/texSize)*colDiffuse*fragColor;;
|
vec4 color = texture2D(texture0, tc/texSize)*colDiffuse*fragColor;;
|
||||||
|
|
||||||
gl_FragColor = vec4(color.rgb, 1.0);;
|
gl_FragColor = vec4(color.rgb, 1.0);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -10,10 +10,8 @@ varying vec4 fragColor;
|
||||||
uniform sampler2D texture0;
|
uniform sampler2D texture0;
|
||||||
uniform vec4 colDiffuse;
|
uniform vec4 colDiffuse;
|
||||||
|
|
||||||
uniform float secondes;
|
uniform float seconds;
|
||||||
|
|
||||||
uniform vec2 size;
|
uniform vec2 size;
|
||||||
|
|
||||||
uniform float freqX;
|
uniform float freqX;
|
||||||
uniform float freqY;
|
uniform float freqY;
|
||||||
uniform float ampX;
|
uniform float ampX;
|
||||||
|
|
@ -21,7 +19,8 @@ uniform float ampY;
|
||||||
uniform float speedX;
|
uniform float speedX;
|
||||||
uniform float speedY;
|
uniform float speedY;
|
||||||
|
|
||||||
void main() {
|
void main()
|
||||||
|
{
|
||||||
float pixelWidth = 1.0/size.x;
|
float pixelWidth = 1.0/size.x;
|
||||||
float pixelHeight = 1.0/size.y;
|
float pixelHeight = 1.0/size.y;
|
||||||
float aspect = pixelHeight/pixelWidth;
|
float aspect = pixelHeight/pixelWidth;
|
||||||
|
|
@ -29,8 +28,8 @@ void main() {
|
||||||
float boxTop = 0.0;
|
float boxTop = 0.0;
|
||||||
|
|
||||||
vec2 p = fragTexCoord;
|
vec2 p = fragTexCoord;
|
||||||
p.x += cos((fragTexCoord.y - boxTop) * freqX / ( pixelWidth * 750.0) + (secondes * speedX)) * ampX * pixelWidth;
|
p.x += cos((fragTexCoord.y - boxTop)*freqX/(pixelWidth*750.0) + (seconds*speedX))*ampX*pixelWidth;
|
||||||
p.y += sin((fragTexCoord.x - boxLeft) * freqY * aspect / ( pixelHeight * 750.0) + (secondes * speedY)) * ampY * pixelHeight;
|
p.y += sin((fragTexCoord.x - boxLeft)*freqY*aspect/(pixelHeight*750.0) + (seconds*speedY))*ampY*pixelHeight;
|
||||||
|
|
||||||
gl_FragColor = texture2D(texture0, p)*colDiffuse*fragColor;
|
gl_FragColor = texture2D(texture0, p)*colDiffuse*fragColor;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,7 @@ varying vec4 fragColor;
|
||||||
uniform sampler2D texture0;
|
uniform sampler2D texture0;
|
||||||
uniform vec4 colDiffuse;
|
uniform vec4 colDiffuse;
|
||||||
|
|
||||||
// NOTE: Add here your custom variables
|
// NOTE: Add your custom variables here
|
||||||
uniform vec2 resolution = vec2(800, 450);
|
uniform vec2 resolution = vec2(800, 450);
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
|
|
|
||||||
|
|
@ -13,7 +13,7 @@ uniform mat4 mvp;
|
||||||
varying vec2 fragTexCoord;
|
varying vec2 fragTexCoord;
|
||||||
varying vec4 fragColor;
|
varying vec4 fragColor;
|
||||||
|
|
||||||
// NOTE: Add here your custom variables
|
// NOTE: Add your custom variables here
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,7 @@ varying vec4 fragColor;
|
||||||
uniform sampler2D texture0;
|
uniform sampler2D texture0;
|
||||||
uniform vec4 colDiffuse;
|
uniform vec4 colDiffuse;
|
||||||
|
|
||||||
// NOTE: Add here your custom variables
|
// NOTE: Add your custom variables here
|
||||||
|
|
||||||
const vec2 size = vec2(800, 450); // Framebuffer size
|
const vec2 size = vec2(800, 450); // Framebuffer size
|
||||||
const float samples = 5.0; // Pixels per axis; higher = bigger glow, worse performance
|
const float samples = 5.0; // Pixels per axis; higher = bigger glow, worse performance
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,7 @@ varying vec4 fragColor;
|
||||||
uniform sampler2D texture0;
|
uniform sampler2D texture0;
|
||||||
uniform vec4 colDiffuse;
|
uniform vec4 colDiffuse;
|
||||||
|
|
||||||
// NOTE: Add here your custom variables
|
// NOTE: Add your custom variables here
|
||||||
|
|
||||||
// NOTE: Render size values must be passed from code
|
// NOTE: Render size values must be passed from code
|
||||||
const float renderWidth = 800.0;
|
const float renderWidth = 800.0;
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,7 @@ varying vec4 fragColor;
|
||||||
uniform sampler2D texture0;
|
uniform sampler2D texture0;
|
||||||
uniform vec4 colDiffuse;
|
uniform vec4 colDiffuse;
|
||||||
|
|
||||||
// NOTE: Add here your custom variables
|
// NOTE: Add your custom variables here
|
||||||
|
|
||||||
float hatchOffsetY = 5.0;
|
float hatchOffsetY = 5.0;
|
||||||
float lumThreshold01 = 0.9;
|
float lumThreshold01 = 0.9;
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,7 @@ varying vec4 fragColor;
|
||||||
uniform sampler2D texture0;
|
uniform sampler2D texture0;
|
||||||
uniform vec4 colDiffuse;
|
uniform vec4 colDiffuse;
|
||||||
|
|
||||||
// NOTE: Add here your custom variables
|
// NOTE: Add your custom variables here
|
||||||
|
|
||||||
// NOTE: Render size values must be passed from code
|
// NOTE: Render size values must be passed from code
|
||||||
const float renderWidth = 800.0;
|
const float renderWidth = 800.0;
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,7 @@ varying vec4 fragColor;
|
||||||
uniform sampler2D texture0;
|
uniform sampler2D texture0;
|
||||||
uniform vec4 colDiffuse;
|
uniform vec4 colDiffuse;
|
||||||
|
|
||||||
// NOTE: Add here your custom variables
|
// NOTE: Add your custom variables here
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,7 @@ varying vec4 fragColor;
|
||||||
uniform sampler2D texture0;
|
uniform sampler2D texture0;
|
||||||
uniform vec4 colDiffuse;
|
uniform vec4 colDiffuse;
|
||||||
|
|
||||||
// NOTE: Add here your custom variables
|
// NOTE: Add your custom variables here
|
||||||
|
|
||||||
const float PI = 3.1415926535;
|
const float PI = 3.1415926535;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,7 @@ varying vec3 fragNormal;
|
||||||
uniform sampler2D texture0;
|
uniform sampler2D texture0;
|
||||||
uniform vec4 colDiffuse;
|
uniform vec4 colDiffuse;
|
||||||
|
|
||||||
// NOTE: Add here your custom variables
|
// NOTE: Add your custom variables here
|
||||||
|
|
||||||
#define MAX_LIGHTS 4
|
#define MAX_LIGHTS 4
|
||||||
#define LIGHT_DIRECTIONAL 0
|
#define LIGHT_DIRECTIONAL 0
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,7 @@ varying vec4 fragColor;
|
||||||
uniform sampler2D texture0;
|
uniform sampler2D texture0;
|
||||||
uniform vec4 colDiffuse;
|
uniform vec4 colDiffuse;
|
||||||
|
|
||||||
// NOTE: Add here your custom variables
|
// NOTE: Add your custom variables here
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -10,18 +10,12 @@ varying vec3 fragNormal;
|
||||||
uniform sampler2D texture0;
|
uniform sampler2D texture0;
|
||||||
uniform vec4 colDiffuse;
|
uniform vec4 colDiffuse;
|
||||||
|
|
||||||
// NOTE: Add here your custom variables
|
// NOTE: Add your custom variables here
|
||||||
|
|
||||||
#define MAX_LIGHTS 4
|
#define MAX_LIGHTS 4
|
||||||
#define LIGHT_DIRECTIONAL 0
|
#define LIGHT_DIRECTIONAL 0
|
||||||
#define LIGHT_POINT 1
|
#define LIGHT_POINT 1
|
||||||
|
|
||||||
struct MaterialProperty {
|
|
||||||
vec3 color;
|
|
||||||
int useSampler;
|
|
||||||
sampler2D sampler;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct Light {
|
struct Light {
|
||||||
int enabled;
|
int enabled;
|
||||||
int type;
|
int type;
|
||||||
|
|
@ -44,6 +38,8 @@ void main()
|
||||||
vec3 viewD = normalize(viewPos - fragPosition);
|
vec3 viewD = normalize(viewPos - fragPosition);
|
||||||
vec3 specular = vec3(0.0);
|
vec3 specular = vec3(0.0);
|
||||||
|
|
||||||
|
vec4 tint = colDiffuse*fragColor;
|
||||||
|
|
||||||
// NOTE: Implement here your fragment shader code
|
// NOTE: Implement here your fragment shader code
|
||||||
|
|
||||||
for (int i = 0; i < MAX_LIGHTS; i++)
|
for (int i = 0; i < MAX_LIGHTS; i++)
|
||||||
|
|
@ -71,7 +67,7 @@ void main()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
vec4 finalColor = (texelColor*((colDiffuse + vec4(specular, 1.0))*vec4(lightDot, 1.0)));
|
vec4 finalColor = (texelColor*((tint + vec4(specular, 1.0))*vec4(lightDot, 1.0)));
|
||||||
finalColor += texelColor*(ambient/10.0);
|
finalColor += texelColor*(ambient/10.0);
|
||||||
|
|
||||||
// Gamma correction
|
// Gamma correction
|
||||||
|
|
|
||||||
|
|
@ -16,7 +16,7 @@ varying vec2 fragTexCoord;
|
||||||
varying vec4 fragColor;
|
varying vec4 fragColor;
|
||||||
varying vec3 fragNormal;
|
varying vec3 fragNormal;
|
||||||
|
|
||||||
// NOTE: Add here your custom variables
|
// NOTE: Add your custom variables here
|
||||||
|
|
||||||
// https://github.com/glslify/glsl-inverse
|
// https://github.com/glslify/glsl-inverse
|
||||||
mat3 inverse(mat3 m)
|
mat3 inverse(mat3 m)
|
||||||
|
|
|
||||||
|
|
@ -16,12 +16,12 @@ void main()
|
||||||
vec4 texelColor = texture(texture0, fragTexCoord)*fragColor;
|
vec4 texelColor = texture(texture0, fragTexCoord)*fragColor;
|
||||||
|
|
||||||
// Convert the (normalized) texel color RED component (GB would work, too)
|
// Convert the (normalized) texel color RED component (GB would work, too)
|
||||||
// to the palette index by scaling up from [0, 1] to [0, 255].
|
// to the palette index by scaling up from [0, 1] to [0, 255]
|
||||||
int index = int(texelColor.r*255.0);
|
int index = int(texelColor.r*255.0);
|
||||||
ivec3 color = palette[index];
|
ivec3 color = palette[index];
|
||||||
|
|
||||||
// Calculate final fragment color. Note that the palette color components
|
// Calculate final fragment color. Note that the palette color components
|
||||||
// are defined in the range [0, 255] and need to be normalized to [0, 1]
|
// are defined in the range [0, 255] and need to be normalized to [0, 1]
|
||||||
// for OpenGL to work.
|
// for OpenGL to work
|
||||||
gl_FragColor = vec4(color/255.0, texelColor.a);
|
gl_FragColor = vec4(color/255.0, texelColor.a);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,7 @@ varying vec4 fragColor;
|
||||||
uniform sampler2D texture0;
|
uniform sampler2D texture0;
|
||||||
uniform vec4 colDiffuse;
|
uniform vec4 colDiffuse;
|
||||||
|
|
||||||
// NOTE: Add here your custom variables
|
// NOTE: Add your custom variables here
|
||||||
|
|
||||||
// NOTE: Render size values must be passed from code
|
// NOTE: Render size values must be passed from code
|
||||||
const float renderWidth = 800.0;
|
const float renderWidth = 800.0;
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,7 @@ varying vec4 fragColor;
|
||||||
uniform sampler2D texture0;
|
uniform sampler2D texture0;
|
||||||
uniform vec4 colDiffuse;
|
uniform vec4 colDiffuse;
|
||||||
|
|
||||||
// NOTE: Add here your custom variables
|
// NOTE: Add your custom variables here
|
||||||
|
|
||||||
float gamma = 0.6;
|
float gamma = 0.6;
|
||||||
float numColors = 8.0;
|
float numColors = 8.0;
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,7 @@ varying vec4 fragColor;
|
||||||
uniform sampler2D texture0;
|
uniform sampler2D texture0;
|
||||||
uniform vec4 colDiffuse;
|
uniform vec4 colDiffuse;
|
||||||
|
|
||||||
// NOTE: Add here your custom variables
|
// NOTE: Add your custom variables here
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,7 @@ varying vec4 fragColor;
|
||||||
uniform sampler2D texture0;
|
uniform sampler2D texture0;
|
||||||
uniform vec4 colDiffuse;
|
uniform vec4 colDiffuse;
|
||||||
|
|
||||||
// NOTE: Add here your custom variables
|
// NOTE: Add your custom variables here
|
||||||
|
|
||||||
float offset = 0.0;
|
float offset = 0.0;
|
||||||
float frequency = 450.0/3.0;
|
float frequency = 450.0/3.0;
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,7 @@ varying vec4 fragColor;
|
||||||
uniform sampler2D texture0;
|
uniform sampler2D texture0;
|
||||||
uniform vec4 colDiffuse;
|
uniform vec4 colDiffuse;
|
||||||
|
|
||||||
// NOTE: Add here your custom variables
|
// NOTE: Add your custom variables here
|
||||||
vec2 resolution = vec2(800.0, 450.0);
|
vec2 resolution = vec2(800.0, 450.0);
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,7 @@ varying vec4 fragColor;
|
||||||
uniform sampler2D texture0;
|
uniform sampler2D texture0;
|
||||||
uniform vec4 colDiffuse;
|
uniform vec4 colDiffuse;
|
||||||
|
|
||||||
// NOTE: Add here your custom variables
|
// NOTE: Add your custom variables here
|
||||||
|
|
||||||
// NOTE: Render size values should be passed from code
|
// NOTE: Render size values should be passed from code
|
||||||
const float renderWidth = 800;
|
const float renderWidth = 800;
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,7 @@ uniform vec4 colDiffuse;
|
||||||
// Output fragment color
|
// Output fragment color
|
||||||
out vec4 finalColor;
|
out vec4 finalColor;
|
||||||
|
|
||||||
// NOTE: Add here your custom variables
|
// NOTE: Add your custom variables here
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
{
|
{
|
||||||
|
|
@ -20,6 +20,9 @@ void main()
|
||||||
|
|
||||||
// NOTE: Implement here your fragment shader code
|
// NOTE: Implement here your fragment shader code
|
||||||
|
|
||||||
finalColor = texelColor*colDiffuse;
|
// final color is the color from the texture
|
||||||
|
// times the tint color (colDiffuse)
|
||||||
|
// times the fragment color (interpolated vertex color)
|
||||||
|
finalColor = texelColor*colDiffuse*fragColor;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -13,7 +13,7 @@ uniform mat4 mvp;
|
||||||
out vec2 fragTexCoord;
|
out vec2 fragTexCoord;
|
||||||
out vec4 fragColor;
|
out vec4 fragColor;
|
||||||
|
|
||||||
// NOTE: Add here your custom variables
|
// NOTE: Add your custom variables here
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,7 @@ uniform vec4 colDiffuse;
|
||||||
// Output fragment color
|
// Output fragment color
|
||||||
out vec4 finalColor;
|
out vec4 finalColor;
|
||||||
|
|
||||||
// NOTE: Add here your custom variables
|
// NOTE: Add your custom variables here
|
||||||
|
|
||||||
const vec2 size = vec2(800, 450); // Framebuffer size
|
const vec2 size = vec2(800, 450); // Framebuffer size
|
||||||
const float samples = 5.0; // Pixels per axis; higher = bigger glow, worse performance
|
const float samples = 5.0; // Pixels per axis; higher = bigger glow, worse performance
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,7 @@ uniform vec4 colDiffuse;
|
||||||
// Output fragment color
|
// Output fragment color
|
||||||
out vec4 finalColor;
|
out vec4 finalColor;
|
||||||
|
|
||||||
// NOTE: Add here your custom variables
|
// NOTE: Add your custom variables here
|
||||||
|
|
||||||
// NOTE: Render size values must be passed from code
|
// NOTE: Render size values must be passed from code
|
||||||
const float renderWidth = 800;
|
const float renderWidth = 800;
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,7 @@ uniform vec4 colDiffuse;
|
||||||
// Output fragment color
|
// Output fragment color
|
||||||
out vec4 finalColor;
|
out vec4 finalColor;
|
||||||
|
|
||||||
// NOTE: Add here your custom variables
|
// NOTE: Add your custom variables here
|
||||||
|
|
||||||
float hatchOffsetY = 5.0;
|
float hatchOffsetY = 5.0;
|
||||||
float lumThreshold01 = 0.9;
|
float lumThreshold01 = 0.9;
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,7 @@ uniform vec4 colDiffuse;
|
||||||
// Output fragment color
|
// Output fragment color
|
||||||
out vec4 finalColor;
|
out vec4 finalColor;
|
||||||
|
|
||||||
// NOTE: Add here your custom variables
|
// NOTE: Add your custom variables here
|
||||||
|
|
||||||
// NOTE: Render size values must be passed from code
|
// NOTE: Render size values must be passed from code
|
||||||
const float renderWidth = 800.0;
|
const float renderWidth = 800.0;
|
||||||
|
|
|
||||||
|
|
@ -17,7 +17,7 @@ float angle = 0.0;
|
||||||
vec2 VectorRotateTime(vec2 v, float speed)
|
vec2 VectorRotateTime(vec2 v, float speed)
|
||||||
{
|
{
|
||||||
float time = uTime*speed;
|
float time = uTime*speed;
|
||||||
float localTime = fract(time); // The time domain this works on is 1 sec.
|
float localTime = fract(time); // The time domain this works on is 1 sec
|
||||||
|
|
||||||
if ((localTime >= 0.0) && (localTime < 0.25)) angle = 0.0;
|
if ((localTime >= 0.0) && (localTime < 0.25)) angle = 0.0;
|
||||||
else if ((localTime >= 0.25) && (localTime < 0.50)) angle = PI/4*sin(2*PI*localTime - PI/2);
|
else if ((localTime >= 0.25) && (localTime < 0.50)) angle = PI/4*sin(2*PI*localTime - PI/2);
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,7 @@ out vec4 fragColor;
|
||||||
uniform sampler2D texture0;
|
uniform sampler2D texture0;
|
||||||
uniform vec4 colDiffuse;
|
uniform vec4 colDiffuse;
|
||||||
|
|
||||||
// NOTE: Add here your custom variables
|
// NOTE: Add your custom variables here
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -5,12 +5,12 @@
|
||||||
The Sieve of Eratosthenes -- a simple shader by ProfJski
|
The Sieve of Eratosthenes -- a simple shader by ProfJski
|
||||||
An early prime number sieve: https://en.wikipedia.org/wiki/Sieve_of_Eratosthenes
|
An early prime number sieve: https://en.wikipedia.org/wiki/Sieve_of_Eratosthenes
|
||||||
|
|
||||||
The screen is divided into a square grid of boxes, each representing an integer value.
|
The screen is divided into a square grid of boxes, each representing an integer value
|
||||||
Each integer is tested to see if it is a prime number. Primes are colored white.
|
Each integer is tested to see if it is a prime number. Primes are colored white
|
||||||
Non-primes are colored with a color that indicates the smallest factor which evenly divdes our integer.
|
Non-primes are colored with a color that indicates the smallest factor which evenly divides our integer
|
||||||
|
|
||||||
You can change the scale variable to make a larger or smaller grid.
|
You can change the scale variable to make a larger or smaller grid
|
||||||
Total number of integers displayed = scale squared, so scale = 100 tests the first 10,000 integers.
|
Total number of integers displayed = scale squared, so scale = 100 tests the first 10,000 integers
|
||||||
|
|
||||||
WARNING: If you make scale too large, your GPU may bog down!
|
WARNING: If you make scale too large, your GPU may bog down!
|
||||||
|
|
||||||
|
|
@ -39,7 +39,7 @@ vec4 Colorizer(float counter, float maxSize)
|
||||||
void main()
|
void main()
|
||||||
{
|
{
|
||||||
vec4 color = vec4(1.0);
|
vec4 color = vec4(1.0);
|
||||||
float scale = 1000.0; // Makes 100x100 square grid. Change this variable to make a smaller or larger grid.
|
float scale = 1000.0; // Makes 100x100 square grid, change this variable to make a smaller or larger grid
|
||||||
int value = int(scale*floor(fragTexCoord.y*scale)+floor(fragTexCoord.x*scale)); // Group pixels into boxes representing integer values
|
int value = int(scale*floor(fragTexCoord.y*scale)+floor(fragTexCoord.x*scale)); // Group pixels into boxes representing integer values
|
||||||
|
|
||||||
if ((value == 0) || (value == 1) || (value == 2)) finalColor = vec4(1.0);
|
if ((value == 0) || (value == 1) || (value == 2)) finalColor = vec4(1.0);
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,7 @@ out vec4 fragColor;
|
||||||
uniform sampler2D texture0;
|
uniform sampler2D texture0;
|
||||||
uniform vec4 colDiffuse;
|
uniform vec4 colDiffuse;
|
||||||
|
|
||||||
// NOTE: Add here your custom variables
|
// NOTE: Add your custom variables here
|
||||||
|
|
||||||
const float PI = 3.1415926535;
|
const float PI = 3.1415926535;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -13,7 +13,7 @@ uniform vec4 colDiffuse;
|
||||||
// Output fragment color
|
// Output fragment color
|
||||||
out vec4 finalColor;
|
out vec4 finalColor;
|
||||||
|
|
||||||
// NOTE: Add here your custom variables
|
// NOTE: Add your custom variables here
|
||||||
|
|
||||||
#define MAX_LIGHTS 4
|
#define MAX_LIGHTS 4
|
||||||
#define LIGHT_DIRECTIONAL 0
|
#define LIGHT_DIRECTIONAL 0
|
||||||
|
|
@ -37,6 +37,7 @@ struct Light {
|
||||||
uniform Light lights[MAX_LIGHTS];
|
uniform Light lights[MAX_LIGHTS];
|
||||||
uniform vec4 ambient;
|
uniform vec4 ambient;
|
||||||
uniform vec3 viewPos;
|
uniform vec3 viewPos;
|
||||||
|
uniform vec4 fogColor;
|
||||||
uniform float fogDensity;
|
uniform float fogDensity;
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
|
|
@ -77,10 +78,6 @@ void main()
|
||||||
// Fog calculation
|
// Fog calculation
|
||||||
float dist = length(viewPos - fragPosition);
|
float dist = length(viewPos - fragPosition);
|
||||||
|
|
||||||
// these could be parameters...
|
|
||||||
const vec4 fogColor = vec4(0.5, 0.5, 0.5, 1.0);
|
|
||||||
//const float fogDensity = 0.16;
|
|
||||||
|
|
||||||
// Exponential fog
|
// Exponential fog
|
||||||
float fogFactor = 1.0/exp((dist*fogDensity)*(dist*fogDensity));
|
float fogFactor = 1.0/exp((dist*fogDensity)*(dist*fogDensity));
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,7 @@ uniform vec4 colDiffuse;
|
||||||
// Output fragment color
|
// Output fragment color
|
||||||
out vec4 finalColor;
|
out vec4 finalColor;
|
||||||
|
|
||||||
// NOTE: Add here your custom variables
|
// NOTE: Add your custom variables here
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -1,14 +1,22 @@
|
||||||
#version 330
|
#version 330
|
||||||
|
|
||||||
|
// Input vertex attributes (from vertex shader)
|
||||||
in vec2 fragTexCoord;
|
in vec2 fragTexCoord;
|
||||||
in vec4 fragColor;
|
in vec4 fragColor;
|
||||||
|
|
||||||
|
// Input uniform values
|
||||||
uniform sampler2D texture0;
|
uniform sampler2D texture0;
|
||||||
uniform vec4 colDiffuse;
|
uniform vec4 colDiffuse;
|
||||||
|
|
||||||
|
// Output fragment color
|
||||||
|
out vec4 finalColor;
|
||||||
|
|
||||||
|
// NOTE: Add your custom variables here
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
{
|
{
|
||||||
vec4 texelColor = texture2D(texture0, fragTexCoord);
|
vec4 texelColor = texture(texture0, fragTexCoord);
|
||||||
gl_FragColor = texelColor*colDiffuse*fragColor;
|
|
||||||
gl_FragDepth = gl_FragCoord.z;
|
finalColor = texelColor*colDiffuse*fragColor;
|
||||||
|
gl_FragDepth = finalColor.z;
|
||||||
}
|
}
|
||||||
|
|
@ -1,5 +1,7 @@
|
||||||
# version 330
|
# version 330
|
||||||
|
|
||||||
|
#define ZERO 0
|
||||||
|
|
||||||
// Input vertex attributes (from vertex shader)
|
// Input vertex attributes (from vertex shader)
|
||||||
in vec2 fragTexCoord;
|
in vec2 fragTexCoord;
|
||||||
in vec4 fragColor;
|
in vec4 fragColor;
|
||||||
|
|
@ -13,10 +15,12 @@ uniform vec3 camPos;
|
||||||
uniform vec3 camDir;
|
uniform vec3 camDir;
|
||||||
uniform vec2 screenCenter;
|
uniform vec2 screenCenter;
|
||||||
|
|
||||||
#define ZERO 0
|
// Output fragment color
|
||||||
|
out vec4 finalColor;
|
||||||
|
|
||||||
// https://learnopengl.com/Advanced-OpenGL/Depth-testing
|
// https://learnopengl.com/Advanced-OpenGL/Depth-testing
|
||||||
float CalcDepth(in vec3 rd, in float Idist){
|
float CalcDepth(in vec3 rd, in float Idist)
|
||||||
|
{
|
||||||
float local_z = dot(normalize(camDir),rd)*Idist;
|
float local_z = dot(normalize(camDir),rd)*Idist;
|
||||||
return (1.0/(local_z) - 1.0/0.01)/(1.0/1000.0 -1.0/0.01);
|
return (1.0/(local_z) - 1.0/0.01)/(1.0/1000.0 -1.0/0.01);
|
||||||
}
|
}
|
||||||
|
|
@ -26,10 +30,8 @@ float sdHorseshoe( in vec3 p, in vec2 c, in float r, in float le, vec2 w )
|
||||||
{
|
{
|
||||||
p.x = abs(p.x);
|
p.x = abs(p.x);
|
||||||
float l = length(p.xy);
|
float l = length(p.xy);
|
||||||
p.xy = mat2(-c.x, c.y,
|
p.xy = mat2(-c.x, c.y, c.y, c.x)*p.xy;
|
||||||
c.y, c.x)*p.xy;
|
p.xy = vec2(((p.y > 0.0) || (p.x > 0.0))? p.x : l*sign(-c.x), (p.x>0.0)? p.y : l);
|
||||||
p.xy = vec2((p.y>0.0 || p.x>0.0)?p.x:l*sign(-c.x),
|
|
||||||
(p.x>0.0)?p.y:l );
|
|
||||||
p.xy = vec2(p.x, abs(p.y - r)) - vec2(le, 0.0);
|
p.xy = vec2(p.x, abs(p.y - r)) - vec2(le, 0.0);
|
||||||
|
|
||||||
vec2 q = vec2(length(max(p.xy, 0.0)) + min(0.0, max(p.x, p.y)), p.z);
|
vec2 q = vec2(length(max(p.xy, 0.0)) + min(0.0, max(p.x, p.y)), p.z);
|
||||||
|
|
@ -44,17 +46,16 @@ float sdSixWayCutHollowSphere( vec3 p, float r, float h, float t )
|
||||||
{
|
{
|
||||||
// Six way symetry Transformation
|
// Six way symetry Transformation
|
||||||
vec3 ap = abs(p);
|
vec3 ap = abs(p);
|
||||||
if(ap.x < max(ap.y, ap.z)){
|
if (ap.x < max(ap.y, ap.z))
|
||||||
|
{
|
||||||
if (ap.y < ap.z) ap.xz = ap.zx;
|
if (ap.y < ap.z) ap.xz = ap.zx;
|
||||||
else ap.xy = ap.yx;
|
else ap.xy = ap.yx;
|
||||||
}
|
}
|
||||||
|
|
||||||
vec2 q = vec2(length(ap.yz), ap.x);
|
vec2 q = vec2(length(ap.yz), ap.x);
|
||||||
|
|
||||||
float w = sqrt(r*r-h*h);
|
float w = sqrt(r*r-h*h);
|
||||||
|
|
||||||
return ((h*q.x<w*q.y) ? length(q-vec2(w,h)) :
|
return ((h*q.x < w*q.y)? length(q - vec2(w, h)) : abs(length(q) - r)) - t;
|
||||||
abs(length(q)-r) ) - t;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// https://iquilezles.org/articles/boxfunctions
|
// https://iquilezles.org/articles/boxfunctions
|
||||||
|
|
@ -65,8 +66,8 @@ vec2 iBox( in vec3 ro, in vec3 rd, in vec3 rad )
|
||||||
vec3 k = abs(m)*rad;
|
vec3 k = abs(m)*rad;
|
||||||
vec3 t1 = -n - k;
|
vec3 t1 = -n - k;
|
||||||
vec3 t2 = -n + k;
|
vec3 t2 = -n + k;
|
||||||
return vec2( max( max( t1.x, t1.y ), t1.z ),
|
|
||||||
min( min( t2.x, t2.y ), t2.z ) );
|
return vec2(max(max(t1.x, t1.y), t1.z), min(min(t2.x, t2.y), t2.z));
|
||||||
}
|
}
|
||||||
|
|
||||||
vec2 opU(vec2 d1, vec2 d2)
|
vec2 opU(vec2 d1, vec2 d2)
|
||||||
|
|
@ -74,14 +75,17 @@ vec2 opU( vec2 d1, vec2 d2 )
|
||||||
return (d1.x < d2.x)? d1 : d2;
|
return (d1.x < d2.x)? d1 : d2;
|
||||||
}
|
}
|
||||||
|
|
||||||
vec2 map( in vec3 pos ){
|
vec2 map(in vec3 pos)
|
||||||
|
{
|
||||||
vec2 res = vec2(sdHorseshoe(pos - vec3(-1.0, 0.08, 1.0), vec2(cos(1.3), sin(1.3)), 0.2, 0.3, vec2(0.03,0.5)), 11.5);
|
vec2 res = vec2(sdHorseshoe(pos - vec3(-1.0, 0.08, 1.0), vec2(cos(1.3), sin(1.3)), 0.2, 0.3, vec2(0.03,0.5)), 11.5);
|
||||||
res = opU(res, vec2(sdSixWayCutHollowSphere(pos-vec3(0.0, 1.0, 0.0), 4.0, 3.5, 0.5), 4.5));
|
res = opU(res, vec2(sdSixWayCutHollowSphere(pos-vec3(0.0, 1.0, 0.0), 4.0, 3.5, 0.5), 4.5));
|
||||||
|
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
// https://www.shadertoy.com/view/Xds3zN
|
// https://www.shadertoy.com/view/Xds3zN
|
||||||
vec2 raycast( in vec3 ro, in vec3 rd ){
|
vec2 raycast(in vec3 ro, in vec3 rd)
|
||||||
|
{
|
||||||
vec2 res = vec2(-1.0, -1.0);
|
vec2 res = vec2(-1.0, -1.0);
|
||||||
|
|
||||||
float tmin = 1.0;
|
float tmin = 1.0;
|
||||||
|
|
@ -111,7 +115,6 @@ vec2 raycast( in vec3 ro, in vec3 rd ){
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// https://iquilezles.org/articles/rmshadows
|
// https://iquilezles.org/articles/rmshadows
|
||||||
float calcSoftshadow(in vec3 ro, in vec3 rd, in float mint, in float tmax)
|
float calcSoftshadow(in vec3 ro, in vec3 rd, in float mint, in float tmax)
|
||||||
{
|
{
|
||||||
|
|
@ -126,12 +129,13 @@ float calcSoftshadow( in vec3 ro, in vec3 rd, in float mint, in float tmax )
|
||||||
float s = clamp(8.0*h/t, 0.0, 1.0);
|
float s = clamp(8.0*h/t, 0.0, 1.0);
|
||||||
res = min(res, s);
|
res = min(res, s);
|
||||||
t += clamp(h, 0.01, 0.2);
|
t += clamp(h, 0.01, 0.2);
|
||||||
if( res<0.004 || t>tmax ) break;
|
if ((res < 0.004) || (t > tmax)) break;
|
||||||
}
|
|
||||||
res = clamp( res, 0.0, 1.0 );
|
|
||||||
return res*res*(3.0-2.0*res);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
res = clamp(res, 0.0, 1.0);
|
||||||
|
|
||||||
|
return res*res*(3.0-2.0*res);
|
||||||
|
}
|
||||||
|
|
||||||
// https://iquilezles.org/articles/normalsSDF
|
// https://iquilezles.org/articles/normalsSDF
|
||||||
vec3 calcNormal(in vec3 pos)
|
vec3 calcNormal(in vec3 pos)
|
||||||
|
|
@ -156,6 +160,7 @@ float calcAO( in vec3 pos, in vec3 nor )
|
||||||
sca *= 0.95;
|
sca *= 0.95;
|
||||||
if (occ>0.35) break;
|
if (occ>0.35) break;
|
||||||
}
|
}
|
||||||
|
|
||||||
return clamp(1.0 - 3.0*occ, 0.0, 1.0)*(0.5+0.5*nor.y);
|
return clamp(1.0 - 3.0*occ, 0.0, 1.0)*(0.5+0.5*nor.y);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -167,7 +172,7 @@ float checkersGradBox( in vec2 p )
|
||||||
// analytical integral (box filter)
|
// analytical integral (box filter)
|
||||||
vec2 i = 2.0*(abs(fract((p - 0.5*w)*0.5)-0.5) - abs(fract((p + 0.5*w)*0.5) - 0.5))/w;
|
vec2 i = 2.0*(abs(fract((p - 0.5*w)*0.5)-0.5) - abs(fract((p + 0.5*w)*0.5) - 0.5))/w;
|
||||||
// xor pattern
|
// xor pattern
|
||||||
return 0.5 - 0.5*i.x*i.y;
|
return (0.5 - 0.5*i.x*i.y);
|
||||||
}
|
}
|
||||||
|
|
||||||
// https://www.shadertoy.com/view/tdS3DG
|
// https://www.shadertoy.com/view/tdS3DG
|
||||||
|
|
@ -249,7 +254,8 @@ vec4 render( in vec3 ro, in vec3 rd)
|
||||||
return vec4(vec3(clamp(col,0.0,1.0)),t);
|
return vec4(vec3(clamp(col,0.0,1.0)),t);
|
||||||
}
|
}
|
||||||
|
|
||||||
vec3 CalcRayDir(vec2 nCoord){
|
vec3 CalcRayDir(vec2 nCoord)
|
||||||
|
{
|
||||||
vec3 horizontal = normalize(cross(camDir,vec3(.0 , 1.0, .0)));
|
vec3 horizontal = normalize(cross(camDir,vec3(.0 , 1.0, .0)));
|
||||||
vec3 vertical = normalize(cross(horizontal,camDir));
|
vec3 vertical = normalize(cross(horizontal,camDir));
|
||||||
return normalize(camDir + horizontal*nCoord.x + vertical*nCoord.y);
|
return normalize(camDir + horizontal*nCoord.x + vertical*nCoord.y);
|
||||||
|
|
@ -279,6 +285,7 @@ void main()
|
||||||
color = res.xyz;
|
color = res.xyz;
|
||||||
depth = CalcDepth(rd,res.w);
|
depth = CalcDepth(rd,res.w);
|
||||||
}
|
}
|
||||||
gl_FragColor = vec4(color , 1.0);
|
|
||||||
|
finalColor = vec4(color , 1.0);
|
||||||
gl_FragDepth = depth;
|
gl_FragDepth = depth;
|
||||||
}
|
}
|
||||||
|
|
@ -7,20 +7,17 @@ in vec4 fragColor;
|
||||||
// Output fragment color
|
// Output fragment color
|
||||||
out vec4 finalColor;
|
out vec4 finalColor;
|
||||||
|
|
||||||
uniform vec2 screenDims; // Dimensions of the screen
|
|
||||||
uniform vec2 c; // c.x = real, c.y = imaginary component. Equation done is z^2 + c
|
uniform vec2 c; // c.x = real, c.y = imaginary component. Equation done is z^2 + c
|
||||||
uniform vec2 offset; // Offset of the scale.
|
uniform vec2 offset; // Offset of the scale
|
||||||
uniform float zoom; // Zoom of the scale.
|
uniform float zoom; // Zoom of the scale
|
||||||
|
|
||||||
const int MAX_ITERATIONS = 255; // Max iterations to do.
|
const int maxIterations = 255; // Max iterations to do
|
||||||
|
const float colorCycles = 2.0; // Number of times the color palette repeats. Can show higher detail for higher iteration numbers
|
||||||
|
|
||||||
// Square a complex number
|
// Square a complex number
|
||||||
vec2 ComplexSquare(vec2 z)
|
vec2 ComplexSquare(vec2 z)
|
||||||
{
|
{
|
||||||
return vec2(
|
return vec2(z.x*z.x - z.y*z.y, z.x*z.y*2.0);
|
||||||
z.x * z.x - z.y * z.y,
|
|
||||||
z.x * z.y * 2.0
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Convert Hue Saturation Value (HSV) color into RGB
|
// Convert Hue Saturation Value (HSV) color into RGB
|
||||||
|
|
@ -34,48 +31,50 @@ vec3 Hsv2rgb(vec3 c)
|
||||||
void main()
|
void main()
|
||||||
{
|
{
|
||||||
/**********************************************************************************************
|
/**********************************************************************************************
|
||||||
Julia sets use a function z^2 + c, where c is a constant.
|
Julia sets use a function z^2 + c, where c is a constant
|
||||||
This function is iterated until the nature of the point is determined.
|
This function is iterated until the nature of the point is determined
|
||||||
|
|
||||||
If the magnitude of the number becomes greater than 2, then from that point onward
|
If the magnitude of the number becomes greater than 2, then from that point onward
|
||||||
the number will get bigger and bigger, and will never get smaller (tends towards infinity).
|
the number will get bigger and bigger, and will never get smaller (tends towards infinity)
|
||||||
2^2 = 4, 4^2 = 8 and so on.
|
2^2 = 4, 4^2 = 8 and so on
|
||||||
So at 2 we stop iterating.
|
So at 2 we stop iterating
|
||||||
|
|
||||||
If the number is below 2, we keep iterating.
|
If the number is below 2, we keep iterating
|
||||||
But when do we stop iterating if the number is always below 2 (it converges)?
|
But when do we stop iterating if the number is always below 2 (it converges)?
|
||||||
That is what MAX_ITERATIONS is for.
|
That is what maxIterations is for
|
||||||
Then we can divide the iterations by the MAX_ITERATIONS value to get a normalized value that we can
|
Then we can divide the iterations by the maxIterations value to get a normalized value
|
||||||
then map to a color.
|
that we can then map to a color
|
||||||
|
|
||||||
We use dot product (z.x * z.x + z.y * z.y) to determine the magnitude (length) squared.
|
We use dot product (z.x*z.x + z.y*z.y) to determine the magnitude (length) squared
|
||||||
And once the magnitude squared is > 4, then magnitude > 2 is also true (saves computational power).
|
And once the magnitude squared is > 4, then magnitude > 2 is also true (saves computational power)
|
||||||
*************************************************************************************************/
|
*************************************************************************************************/
|
||||||
|
|
||||||
// The pixel coordinates are scaled so they are on the mandelbrot scale
|
// The pixel coordinates are scaled so they are on the mandelbrot scale
|
||||||
// NOTE: fragTexCoord already comes as normalized screen coordinates but offset must be normalized before scaling and zoom
|
// NOTE: fragTexCoord already comes as normalized screen coordinates but offset must be normalized before scaling and zoom
|
||||||
vec2 z = vec2((fragTexCoord.x + offset.x/screenDims.x)*2.5/zoom, (fragTexCoord.y + offset.y/screenDims.y)*1.5/zoom);
|
vec2 z = vec2((fragTexCoord.x - 0.5f)*2.5, (fragTexCoord.y - 0.5)*1.5)/zoom;
|
||||||
|
z.x += offset.x;
|
||||||
|
z.y += offset.y;
|
||||||
|
|
||||||
int iterations = 0;
|
int iterations = 0;
|
||||||
for (iterations = 0; iterations < MAX_ITERATIONS; iterations++)
|
for (iterations = 0; iterations < maxIterations; iterations++)
|
||||||
{
|
{
|
||||||
z = ComplexSquare(z) + c; // Iterate function
|
z = ComplexSquare(z) + c; // Iterate function
|
||||||
|
|
||||||
if (dot(z, z) > 4.0) break;
|
if (dot(z, z) > 4.0) break;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Another few iterations decreases errors in the smoothing calculation.
|
// Another few iterations decreases errors in the smoothing calculation
|
||||||
// See http://linas.org/art-gallery/escape/escape.html for more information.
|
// See http://linas.org/art-gallery/escape/escape.html for more information
|
||||||
z = ComplexSquare(z) + c;
|
z = ComplexSquare(z) + c;
|
||||||
z = ComplexSquare(z) + c;
|
z = ComplexSquare(z) + c;
|
||||||
|
|
||||||
// This last part smooths the color (again see link above).
|
// This last part smooths the color (again see link above)
|
||||||
float smoothVal = float(iterations) + 1.0 - (log(log(length(z)))/log(2.0));
|
float smoothVal = float(iterations) + 1.0 - (log(log(length(z)))/log(2.0));
|
||||||
|
|
||||||
// Normalize the value so it is between 0 and 1.
|
// Normalize the value so it is between 0 and 1
|
||||||
float norm = smoothVal/float(MAX_ITERATIONS);
|
float norm = smoothVal/float(maxIterations);
|
||||||
|
|
||||||
// If in set, color black. 0.999 allows for some float accuracy error.
|
// If in set, color black. 0.999 allows for some float accuracy error
|
||||||
if (norm > 0.999) finalColor = vec4(0.0, 0.0, 0.0, 1.0);
|
if (norm > 0.999) finalColor = vec4(0.0, 0.0, 0.0, 1.0);
|
||||||
else finalColor = vec4(Hsv2rgb(vec3(norm, 1.0, 1.0)), 1.0);
|
else finalColor = vec4(Hsv2rgb(vec3(norm*colorCycles, 1.0, 1.0)), 1.0);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@
|
||||||
// Input vertex attributes (from vertex shader)
|
// Input vertex attributes (from vertex shader)
|
||||||
in vec3 fragPosition;
|
in vec3 fragPosition;
|
||||||
in vec2 fragTexCoord;
|
in vec2 fragTexCoord;
|
||||||
//in vec4 fragColor;
|
in vec4 fragColor;
|
||||||
in vec3 fragNormal;
|
in vec3 fragNormal;
|
||||||
|
|
||||||
// Input uniform values
|
// Input uniform values
|
||||||
|
|
@ -13,18 +13,12 @@ uniform vec4 colDiffuse;
|
||||||
// Output fragment color
|
// Output fragment color
|
||||||
out vec4 finalColor;
|
out vec4 finalColor;
|
||||||
|
|
||||||
// NOTE: Add here your custom variables
|
// NOTE: Add your custom variables here
|
||||||
|
|
||||||
#define MAX_LIGHTS 4
|
#define MAX_LIGHTS 4
|
||||||
#define LIGHT_DIRECTIONAL 0
|
#define LIGHT_DIRECTIONAL 0
|
||||||
#define LIGHT_POINT 1
|
#define LIGHT_POINT 1
|
||||||
|
|
||||||
struct MaterialProperty {
|
|
||||||
vec3 color;
|
|
||||||
int useSampler;
|
|
||||||
sampler2D sampler;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct Light {
|
struct Light {
|
||||||
int enabled;
|
int enabled;
|
||||||
int type;
|
int type;
|
||||||
|
|
@ -47,6 +41,8 @@ void main()
|
||||||
vec3 viewD = normalize(viewPos - fragPosition);
|
vec3 viewD = normalize(viewPos - fragPosition);
|
||||||
vec3 specular = vec3(0.0);
|
vec3 specular = vec3(0.0);
|
||||||
|
|
||||||
|
vec4 tint = colDiffuse*fragColor;
|
||||||
|
|
||||||
// NOTE: Implement here your fragment shader code
|
// NOTE: Implement here your fragment shader code
|
||||||
|
|
||||||
for (int i = 0; i < MAX_LIGHTS; i++)
|
for (int i = 0; i < MAX_LIGHTS; i++)
|
||||||
|
|
@ -74,8 +70,8 @@ void main()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
finalColor = (texelColor*((colDiffuse + vec4(specular, 1.0))*vec4(lightDot, 1.0)));
|
finalColor = (texelColor*((tint + vec4(specular, 1.0))*vec4(lightDot, 1.0)));
|
||||||
finalColor += texelColor*(ambient/10.0)*colDiffuse;
|
finalColor += texelColor*(ambient/10.0)*tint;
|
||||||
|
|
||||||
// Gamma correction
|
// Gamma correction
|
||||||
finalColor = pow(finalColor, vec4(1.0/2.2));
|
finalColor = pow(finalColor, vec4(1.0/2.2));
|
||||||
|
|
|
||||||
|
|
@ -17,7 +17,7 @@ out vec2 fragTexCoord;
|
||||||
out vec4 fragColor;
|
out vec4 fragColor;
|
||||||
out vec3 fragNormal;
|
out vec3 fragNormal;
|
||||||
|
|
||||||
// NOTE: Add here your custom variables
|
// NOTE: Add your custom variables here
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -18,19 +18,16 @@ out vec2 fragTexCoord;
|
||||||
out vec4 fragColor;
|
out vec4 fragColor;
|
||||||
out vec3 fragNormal;
|
out vec3 fragNormal;
|
||||||
|
|
||||||
// NOTE: Add here your custom variables
|
// NOTE: Add your custom variables here
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
{
|
{
|
||||||
// Compute MVP for current instance
|
|
||||||
mat4 mvpi = mvp*instanceTransform;
|
|
||||||
|
|
||||||
// Send vertex attributes to fragment shader
|
// Send vertex attributes to fragment shader
|
||||||
fragPosition = vec3(mvpi*vec4(vertexPosition, 1.0));
|
fragPosition = vec3(instanceTransform*vec4(vertexPosition, 1.0));
|
||||||
fragTexCoord = vertexTexCoord;
|
fragTexCoord = vertexTexCoord;
|
||||||
//fragColor = vertexColor;
|
fragColor = vec4(1.0);
|
||||||
fragNormal = normalize(vec3(matNormal*vec4(vertexNormal, 1.0)));
|
fragNormal = normalize(vec3(matNormal*vec4(vertexNormal, 1.0)));
|
||||||
|
|
||||||
// Calculate final vertex position
|
// Calculate final vertex position, note that we multiply mvp by instanceTransform
|
||||||
gl_Position = mvpi*vec4(vertexPosition, 1.0);
|
gl_Position = mvp*instanceTransform*vec4(vertexPosition, 1.0);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,7 @@ uniform vec4 colDiffuse;
|
||||||
// Output fragment color
|
// Output fragment color
|
||||||
out vec4 finalColor;
|
out vec4 finalColor;
|
||||||
|
|
||||||
// NOTE: Add here your custom variables
|
// NOTE: Add your custom variables here
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
#version 330
|
#version 330
|
||||||
|
|
||||||
const int colors = 8;
|
const int MAX_INDEXED_COLORS = 8;
|
||||||
|
|
||||||
// Input fragment attributes (from fragment shader)
|
// Input fragment attributes (from fragment shader)
|
||||||
in vec2 fragTexCoord;
|
in vec2 fragTexCoord;
|
||||||
|
|
@ -8,7 +8,8 @@ in vec4 fragColor;
|
||||||
|
|
||||||
// Input uniform values
|
// Input uniform values
|
||||||
uniform sampler2D texture0;
|
uniform sampler2D texture0;
|
||||||
uniform ivec3 palette[colors];
|
uniform ivec3 palette[MAX_INDEXED_COLORS];
|
||||||
|
//uniform sampler2D palette; // Alternative to ivec3, palette provided as a 256x1 texture
|
||||||
|
|
||||||
// Output fragment color
|
// Output fragment color
|
||||||
out vec4 finalColor;
|
out vec4 finalColor;
|
||||||
|
|
@ -16,15 +17,17 @@ out vec4 finalColor;
|
||||||
void main()
|
void main()
|
||||||
{
|
{
|
||||||
// Texel color fetching from texture sampler
|
// Texel color fetching from texture sampler
|
||||||
|
// NOTE: The texel is actually the GRAYSCALE index color
|
||||||
vec4 texelColor = texture(texture0, fragTexCoord)*fragColor;
|
vec4 texelColor = texture(texture0, fragTexCoord)*fragColor;
|
||||||
|
|
||||||
// Convert the (normalized) texel color RED component (GB would work, too)
|
// Convert the (normalized) texel color RED component (GB would work, too)
|
||||||
// to the palette index by scaling up from [0, 1] to [0, 255].
|
// to the palette index by scaling up from [0..1] to [0..255]
|
||||||
int index = int(texelColor.r*255.0);
|
int index = int(texelColor.r*255.0);
|
||||||
ivec3 color = palette[index];
|
ivec3 color = palette[index];
|
||||||
|
|
||||||
|
//finalColor = texture(palette, texelColor.xy); // Alternative to ivec3
|
||||||
|
|
||||||
// Calculate final fragment color. Note that the palette color components
|
// Calculate final fragment color. Note that the palette color components
|
||||||
// are defined in the range [0, 255] and need to be normalized to [0, 1]
|
// are defined in the range [0..255] and need to be normalized to [0..1]
|
||||||
// for OpenGL to work.
|
|
||||||
finalColor = vec4(color/255.0, texelColor.a);
|
finalColor = vec4(color/255.0, texelColor.a);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -67,7 +67,7 @@ float GgxDistribution(float nDotH,float roughness)
|
||||||
float a = roughness*roughness*roughness*roughness;
|
float a = roughness*roughness*roughness*roughness;
|
||||||
float d = nDotH*nDotH*(a - 1.0) + 1.0;
|
float d = nDotH*nDotH*(a - 1.0) + 1.0;
|
||||||
d = PI*d*d;
|
d = PI*d*d;
|
||||||
return a / max(d,0.0000001);
|
return (a/max(d,0.0000001));
|
||||||
}
|
}
|
||||||
|
|
||||||
float GeomSmith(float nDotV,float nDotL,float roughness)
|
float GeomSmith(float nDotV,float nDotL,float roughness)
|
||||||
|
|
@ -91,7 +91,7 @@ vec3 ComputePBR()
|
||||||
|
|
||||||
if (useTexMRA == 1)
|
if (useTexMRA == 1)
|
||||||
{
|
{
|
||||||
vec4 mra = texture(mraMap, vec2(fragTexCoord.x*tiling.x + offset.x, fragTexCoord.y*tiling.y + offset.y))*useTexMRA;
|
vec4 mra = texture(mraMap, vec2(fragTexCoord.x*tiling.x + offset.x, fragTexCoord.y*tiling.y + offset.y));
|
||||||
metallic = clamp(mra.r + metallicValue, 0.04, 1.0);
|
metallic = clamp(mra.r + metallicValue, 0.04, 1.0);
|
||||||
roughness = clamp(mra.g + roughnessValue, 0.04, 1.0);
|
roughness = clamp(mra.g + roughnessValue, 0.04, 1.0);
|
||||||
ao = (mra.b + aoValue)*0.5;
|
ao = (mra.b + aoValue)*0.5;
|
||||||
|
|
@ -111,7 +111,7 @@ vec3 ComputePBR()
|
||||||
emissive = (texture(emissiveMap, vec2(fragTexCoord.x*tiling.x + offset.x, fragTexCoord.y*tiling.y + offset.y)).rgb).g*emissiveColor.rgb*emissivePower*useTexEmissive;
|
emissive = (texture(emissiveMap, vec2(fragTexCoord.x*tiling.x + offset.x, fragTexCoord.y*tiling.y + offset.y)).rgb).g*emissiveColor.rgb*emissivePower*useTexEmissive;
|
||||||
|
|
||||||
// return N;//vec3(metallic,metallic,metallic);
|
// return N;//vec3(metallic,metallic,metallic);
|
||||||
// if dia-electric use base reflectivity of 0.04 otherwise ut is a metal use albedo as base reflectivity
|
// If dia-electric use base reflectivity of 0.04 otherwise ut is a metal use albedo as base reflectivity
|
||||||
vec3 baseRefl = mix(vec3(0.04), albedo.rgb, metallic);
|
vec3 baseRefl = mix(vec3(0.04), albedo.rgb, metallic);
|
||||||
vec3 lightAccum = vec3(0.0); // Acumulate lighting lum
|
vec3 lightAccum = vec3(0.0); // Acumulate lighting lum
|
||||||
|
|
||||||
|
|
@ -145,7 +145,7 @@ vec3 ComputePBR()
|
||||||
|
|
||||||
vec3 ambientFinal = (ambientColor + albedo)*ambient*0.5;
|
vec3 ambientFinal = (ambientColor + albedo)*ambient*0.5;
|
||||||
|
|
||||||
return ambientFinal + lightAccum*ao + emissive;
|
return (ambientFinal + lightAccum*ao + emissive);
|
||||||
}
|
}
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,7 @@
|
||||||
in vec3 vertexPosition;
|
in vec3 vertexPosition;
|
||||||
in vec2 vertexTexCoord;
|
in vec2 vertexTexCoord;
|
||||||
in vec3 vertexNormal;
|
in vec3 vertexNormal;
|
||||||
in vec3 vertexTangent;
|
in vec4 vertexTangent;
|
||||||
in vec4 vertexColor;
|
in vec4 vertexColor;
|
||||||
|
|
||||||
// Input uniform values
|
// Input uniform values
|
||||||
|
|
@ -26,17 +26,17 @@ const float normalOffset = 0.1;
|
||||||
void main()
|
void main()
|
||||||
{
|
{
|
||||||
// Compute binormal from vertex normal and tangent
|
// Compute binormal from vertex normal and tangent
|
||||||
vec3 vertexBinormal = cross(vertexNormal, vertexTangent);
|
vec3 vertexBinormal = cross(vertexNormal, vertexTangent.xyz)*vertexTangent.w;
|
||||||
|
|
||||||
// Compute fragment normal based on normal transformations
|
// Compute fragment normal based on normal transformations
|
||||||
mat3 normalMatrix = transpose(inverse(mat3(matModel)));
|
mat3 normalMatrix = transpose(inverse(mat3(matModel)));
|
||||||
|
|
||||||
// Compute fragment position based on model transformations
|
// Compute fragment position based on model transformations
|
||||||
fragPosition = vec3(matModel*vec4(vertexPosition, 1.0f));
|
fragPosition = vec3(matModel*vec4(vertexPosition, 1.0));
|
||||||
|
|
||||||
fragTexCoord = vertexTexCoord*2.0;
|
fragTexCoord = vertexTexCoord*2.0;
|
||||||
fragNormal = normalize(normalMatrix*vertexNormal);
|
fragNormal = normalize(normalMatrix*vertexNormal);
|
||||||
vec3 fragTangent = normalize(normalMatrix*vertexTangent);
|
vec3 fragTangent = normalize(normalMatrix*vertexTangent.xyz);
|
||||||
fragTangent = normalize(fragTangent - dot(fragTangent, fragNormal)*fragNormal);
|
fragTangent = normalize(fragTangent - dot(fragTangent, fragNormal)*fragNormal);
|
||||||
vec3 fragBinormal = normalize(normalMatrix*vertexBinormal);
|
vec3 fragBinormal = normalize(normalMatrix*vertexBinormal);
|
||||||
fragBinormal = cross(fragNormal, fragTangent);
|
fragBinormal = cross(fragNormal, fragTangent);
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,7 @@ uniform vec4 colDiffuse;
|
||||||
// Output fragment color
|
// Output fragment color
|
||||||
out vec4 finalColor;
|
out vec4 finalColor;
|
||||||
|
|
||||||
// NOTE: Add here your custom variables
|
// NOTE: Add your custom variables here
|
||||||
|
|
||||||
// NOTE: Render size values must be passed from code
|
// NOTE: Render size values must be passed from code
|
||||||
const float renderWidth = 800;
|
const float renderWidth = 800;
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,7 @@ uniform vec4 colDiffuse;
|
||||||
// Output fragment color
|
// Output fragment color
|
||||||
out vec4 finalColor;
|
out vec4 finalColor;
|
||||||
|
|
||||||
// NOTE: Add here your custom variables
|
// NOTE: Add your custom variables here
|
||||||
|
|
||||||
float gamma = 0.6;
|
float gamma = 0.6;
|
||||||
float numColors = 8.0;
|
float numColors = 8.0;
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,7 @@ uniform vec4 colDiffuse;
|
||||||
// Output fragment color
|
// Output fragment color
|
||||||
out vec4 finalColor;
|
out vec4 finalColor;
|
||||||
|
|
||||||
// NOTE: Add here your custom variables
|
// NOTE: Add your custom variables here
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -33,7 +33,7 @@ uniform vec2 resolution;
|
||||||
// SOFTWARE.
|
// SOFTWARE.
|
||||||
|
|
||||||
// A list of useful distance function to simple primitives, and an example on how to
|
// A list of useful distance function to simple primitives, and an example on how to
|
||||||
// do some interesting boolean operations, repetition and displacement.
|
// do some interesting boolean operations, repetition and displacement
|
||||||
//
|
//
|
||||||
// More info here: http://www.iquilezles.org/www/articles/distfunctions/distfunctions.htm
|
// More info here: http://www.iquilezles.org/www/articles/distfunctions/distfunctions.htm
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,7 @@ uniform vec4 colDiffuse;
|
||||||
// Output fragment color
|
// Output fragment color
|
||||||
out vec4 finalColor;
|
out vec4 finalColor;
|
||||||
|
|
||||||
// NOTE: Add here your custom variables
|
// NOTE: Add your custom variables here
|
||||||
|
|
||||||
// NOTE: Render size values must be passed from code
|
// NOTE: Render size values must be passed from code
|
||||||
const float renderWidth = 800;
|
const float renderWidth = 800;
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,7 @@ uniform vec4 colDiffuse;
|
||||||
// Output fragment color
|
// Output fragment color
|
||||||
out vec4 finalColor;
|
out vec4 finalColor;
|
||||||
|
|
||||||
// NOTE: Add here your custom variables
|
// NOTE: Add your custom variables here
|
||||||
uniform vec2 resolution = vec2(800, 450);
|
uniform vec2 resolution = vec2(800, 450);
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
|
|
@ -20,22 +20,22 @@ void main()
|
||||||
float y = 1.0/resolution.y;
|
float y = 1.0/resolution.y;
|
||||||
|
|
||||||
vec4 horizEdge = vec4(0.0);
|
vec4 horizEdge = vec4(0.0);
|
||||||
horizEdge -= texture2D(texture0, vec2(fragTexCoord.x - x, fragTexCoord.y - y))*1.0;
|
horizEdge -= texture(texture0, vec2(fragTexCoord.x - x, fragTexCoord.y - y))*1.0;
|
||||||
horizEdge -= texture2D(texture0, vec2(fragTexCoord.x - x, fragTexCoord.y ))*2.0;
|
horizEdge -= texture(texture0, vec2(fragTexCoord.x - x, fragTexCoord.y ))*2.0;
|
||||||
horizEdge -= texture2D(texture0, vec2(fragTexCoord.x - x, fragTexCoord.y + y))*1.0;
|
horizEdge -= texture(texture0, vec2(fragTexCoord.x - x, fragTexCoord.y + y))*1.0;
|
||||||
horizEdge += texture2D(texture0, vec2(fragTexCoord.x + x, fragTexCoord.y - y))*1.0;
|
horizEdge += texture(texture0, vec2(fragTexCoord.x + x, fragTexCoord.y - y))*1.0;
|
||||||
horizEdge += texture2D(texture0, vec2(fragTexCoord.x + x, fragTexCoord.y ))*2.0;
|
horizEdge += texture(texture0, vec2(fragTexCoord.x + x, fragTexCoord.y ))*2.0;
|
||||||
horizEdge += texture2D(texture0, vec2(fragTexCoord.x + x, fragTexCoord.y + y))*1.0;
|
horizEdge += texture(texture0, vec2(fragTexCoord.x + x, fragTexCoord.y + y))*1.0;
|
||||||
|
|
||||||
vec4 vertEdge = vec4(0.0);
|
vec4 vertEdge = vec4(0.0);
|
||||||
vertEdge -= texture2D(texture0, vec2(fragTexCoord.x - x, fragTexCoord.y - y))*1.0;
|
vertEdge -= texture(texture0, vec2(fragTexCoord.x - x, fragTexCoord.y - y))*1.0;
|
||||||
vertEdge -= texture2D(texture0, vec2(fragTexCoord.x , fragTexCoord.y - y))*2.0;
|
vertEdge -= texture(texture0, vec2(fragTexCoord.x , fragTexCoord.y - y))*2.0;
|
||||||
vertEdge -= texture2D(texture0, vec2(fragTexCoord.x + x, fragTexCoord.y - y))*1.0;
|
vertEdge -= texture(texture0, vec2(fragTexCoord.x + x, fragTexCoord.y - y))*1.0;
|
||||||
vertEdge += texture2D(texture0, vec2(fragTexCoord.x - x, fragTexCoord.y + y))*1.0;
|
vertEdge += texture(texture0, vec2(fragTexCoord.x - x, fragTexCoord.y + y))*1.0;
|
||||||
vertEdge += texture2D(texture0, vec2(fragTexCoord.x , fragTexCoord.y + y))*2.0;
|
vertEdge += texture(texture0, vec2(fragTexCoord.x , fragTexCoord.y + y))*2.0;
|
||||||
vertEdge += texture2D(texture0, vec2(fragTexCoord.x + x, fragTexCoord.y + y))*1.0;
|
vertEdge += texture(texture0, vec2(fragTexCoord.x + x, fragTexCoord.y + y))*1.0;
|
||||||
|
|
||||||
vec3 edge = sqrt((horizEdge.rgb*horizEdge.rgb) + (vertEdge.rgb*vertEdge.rgb));
|
vec3 edge = sqrt((horizEdge.rgb*horizEdge.rgb) + (vertEdge.rgb*vertEdge.rgb));
|
||||||
|
|
||||||
finalColor = vec4(edge, texture2D(texture0, fragTexCoord).a);
|
finalColor = vec4(edge, texture(texture0, fragTexCoord).a);
|
||||||
}
|
}
|
||||||
|
|
@ -7,7 +7,7 @@ in vec4 fragColor;
|
||||||
// Output fragment color
|
// Output fragment color
|
||||||
out vec4 finalColor;
|
out vec4 finalColor;
|
||||||
|
|
||||||
// NOTE: Add here your custom variables
|
// NOTE: Add your custom variables here
|
||||||
|
|
||||||
#define MAX_SPOTS 3
|
#define MAX_SPOTS 3
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,7 @@ uniform vec4 colDiffuse;
|
||||||
// Output fragment color
|
// Output fragment color
|
||||||
out vec4 finalColor;
|
out vec4 finalColor;
|
||||||
|
|
||||||
// NOTE: Add here your custom variables
|
// NOTE: Add your custom variables here
|
||||||
|
|
||||||
// NOTE: Render size values should be passed from code
|
// NOTE: Render size values should be passed from code
|
||||||
const float renderWidth = 800;
|
const float renderWidth = 800;
|
||||||
|
|
@ -41,7 +41,7 @@ void main()
|
||||||
}
|
}
|
||||||
|
|
||||||
tc += center;
|
tc += center;
|
||||||
vec4 color = texture2D(texture0, tc/texSize)*colDiffuse*fragColor;;
|
vec4 color = texture(texture0, tc/texSize)*colDiffuse*fragColor;;
|
||||||
|
|
||||||
finalColor = vec4(color.rgb, 1.0);;
|
finalColor = vec4(color.rgb, 1.0);;
|
||||||
}
|
}
|
||||||
|
|
@ -11,7 +11,7 @@ uniform vec4 colDiffuse;
|
||||||
// Output fragment color
|
// Output fragment color
|
||||||
out vec4 finalColor;
|
out vec4 finalColor;
|
||||||
|
|
||||||
uniform float secondes;
|
uniform float seconds;
|
||||||
|
|
||||||
uniform vec2 size;
|
uniform vec2 size;
|
||||||
|
|
||||||
|
|
@ -22,7 +22,8 @@ uniform float ampY;
|
||||||
uniform float speedX;
|
uniform float speedX;
|
||||||
uniform float speedY;
|
uniform float speedY;
|
||||||
|
|
||||||
void main() {
|
void main()
|
||||||
|
{
|
||||||
float pixelWidth = 1.0/size.x;
|
float pixelWidth = 1.0/size.x;
|
||||||
float pixelHeight = 1.0/size.y;
|
float pixelHeight = 1.0/size.y;
|
||||||
float aspect = pixelHeight/pixelWidth;
|
float aspect = pixelHeight/pixelWidth;
|
||||||
|
|
@ -30,8 +31,8 @@ void main() {
|
||||||
float boxTop = 0.0;
|
float boxTop = 0.0;
|
||||||
|
|
||||||
vec2 p = fragTexCoord;
|
vec2 p = fragTexCoord;
|
||||||
p.x += cos((fragTexCoord.y - boxTop) * freqX / ( pixelWidth * 750.0) + (secondes * speedX)) * ampX * pixelWidth;
|
p.x += cos((fragTexCoord.y - boxTop)*freqX/(pixelWidth*750.0) + (seconds*speedX))*ampX*pixelWidth;
|
||||||
p.y += sin((fragTexCoord.x - boxLeft) * freqY * aspect / ( pixelHeight * 750.0) + (secondes * speedY)) * ampY * pixelHeight;
|
p.y += sin((fragTexCoord.x - boxLeft)*freqY*aspect/(pixelHeight*750.0) + (seconds*speedY))*ampY*pixelHeight;
|
||||||
|
|
||||||
finalColor = texture(texture0, p)*colDiffuse*fragColor;
|
finalColor = texture(texture0, p)*colDiffuse*fragColor;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -2582,9 +2582,10 @@ public static unsafe partial class Raylib
|
||||||
byte* fileData,
|
byte* fileData,
|
||||||
int dataSize,
|
int dataSize,
|
||||||
int fontSize,
|
int fontSize,
|
||||||
int* fontChars,
|
int* codepoints,
|
||||||
int glyphCount,
|
int codepointsCount,
|
||||||
FontType type
|
FontType type,
|
||||||
|
int* glyphCount
|
||||||
);
|
);
|
||||||
|
|
||||||
/// <summary>Generate image font atlas using chars info</summary>
|
/// <summary>Generate image font atlas using chars info</summary>
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue