Sketch ini

This commit is contained in:
Ilusha 2024-03-17 10:04:52 +03:00 committed by IlyaShurupov
parent be0177b1b0
commit b8bab2264f
16 changed files with 2510 additions and 0 deletions

BIN
Sketch3D/rsc/Font.ttf Normal file

Binary file not shown.

View file

@ -0,0 +1,15 @@
#version 330 core
in vec2 UV;
out vec4 color;
uniform sampler2D renderedTexture;
void main(){
vec4 texColor = texture(renderedTexture, UV);
if(texColor.a < 0.2)
discard;
color = texColor;
}

View file

@ -0,0 +1,12 @@
#version 330 core
// Input vertex data, different for all executions of this shader.
layout(location = 0) in vec3 vertexPosition_modelspace;
// Output data ; will be interpolated for each fragment.
out vec2 UV;
void main(){
gl_Position = vec4(vertexPosition_modelspace.x, vertexPosition_modelspace.y, -0.99, 1);
UV = (vertexPosition_modelspace.xy + vec2(1, 1)) / 2.0;
}

View file

@ -0,0 +1,28 @@
#version 330 core
uniform vec4 Color;
layout(location = 0) out vec4 color;
uniform float Target;
uniform vec4 BGCol;
#define A 0.1f
void main() {
float x = gl_FragCoord.z;
float val = A;
float f = Target * 2;
if (x < f) {
val = ((A - 1) / f) * x + 1;
}
val = clamp(val, A, 1);
color = vec4((Color.xyz - BGCol.xyz) * val + BGCol.xyz, 1.f);
}

View file

@ -0,0 +1,170 @@
#version 330 core
#define PI 3.14
layout (lines) in;
layout (triangle_strip, max_vertices = 16) out;
in float thickness[];
uniform float Ratio;
void main2() {
float r = sqrt(Ratio);
vec4 l1 = gl_in[0].gl_Position;
vec4 l2 = gl_in[1].gl_Position;
vec2 l1p = l1.xy / l1.w;
vec2 l2p = l2.xy / l2.w;
float t1 = thickness[0] / l1.w;
float t2 = thickness[1] / l2.w;
vec2 l = normalize(vec2(l2p.x / r, l2p.y * r) - vec2(l1p.x / r, l1p.y * r));
vec2 tmp = vec2(-l.y, l.x);
vec2 tmp_poj = vec2(tmp.x * r, tmp.y / r);
vec2 l_poj = vec2(l.x * r, l.y / r);
vec2 p1 = l1p.xy + (tmp_poj * t1);
vec2 p2 = l1p.xy - (tmp_poj * t1);
vec2 p3 = l2p.xy + (tmp_poj * t2);
vec2 p4 = l2p.xy - (tmp_poj * t2);
gl_Position = vec4(p1.x, p1.y , l1.z, 1);
EmitVertex();
gl_Position = vec4(p2.x, p2.y, l1.z, 1);
EmitVertex();
gl_Position = vec4(p3.x, p3.y, l2.z, 1);
EmitVertex();
gl_Position = vec4(p4.x, p4.y, l2.z, 1);
EmitVertex();
EndPrimitive();
p1 = l1p.xy + (tmp_poj * t1);
p2 = l1p.xy - (tmp_poj * t1);
p3 = l1p.xy + (tmp_poj * t1) - (l_poj * t1) / 2.f;
p4 = l1p.xy - (tmp_poj * t1) - (l_poj * t1) / 2.f;
vec2 p5 = l1p.xy + (tmp_poj * t1) / 2.f - (l_poj * t1);
vec2 p6 = l1p.xy - (tmp_poj * t1) / 2.f - (l_poj * t1);
gl_Position = vec4(p1.x, p1.y, l1.z, 1);
EmitVertex();
gl_Position = vec4(p2.x, p2.y, l1.z, 1);
EmitVertex();
gl_Position = vec4(p3.x, p3.y, l1.z, 1);
EmitVertex();
gl_Position = vec4(p4.x, p4.y, l1.z, 1);
EmitVertex();
gl_Position = vec4(p5.x, p5.y, l1.z, 1);
EmitVertex();
gl_Position = vec4(p6.x, p6.y, l1.z, 1);
EmitVertex();
EndPrimitive();
p1 = l2p.xy + (tmp_poj * t2);
p2 = l2p.xy - (tmp_poj * t2);
p3 = l2p.xy + (tmp_poj * t2) + (l_poj * t2) / 2.f;
p4 = l2p.xy - (tmp_poj * t2) + (l_poj * t2) / 2.f;
p5 = l2p.xy + (tmp_poj * t2) / 2.f + (l_poj * t2);
p6 = l2p.xy - (tmp_poj * t2) / 2.f + (l_poj * t2);
gl_Position = vec4(p1.x, p1.y, l2.z, 1);
EmitVertex();
gl_Position = vec4(p2.x, p2.y, l2.z, 1);
EmitVertex();
gl_Position = vec4(p3.x, p3.y, l2.z, 1);
EmitVertex();
gl_Position = vec4(p4.x, p4.y, l2.z, 1);
EmitVertex();
gl_Position = vec4(p5.x, p5.y, l2.z, 1);
EmitVertex();
gl_Position = vec4(p6.x, p6.y, l2.z, 1);
EmitVertex();
EndPrimitive();
}
void main() {
float r = sqrt(Ratio);
vec4 l1 = gl_in[0].gl_Position;
vec4 l2 = gl_in[1].gl_Position;
vec2 l1p = l1.xy / l1.w;
vec2 l2p = l2.xy / l2.w;
float t1 = thickness[0] / l1.w;
float t2 = thickness[1] / l2.w;
vec2 l = normalize(vec2(l2p.x / r, l2p.y * r) - vec2(l1p.x / r, l1p.y * r));
vec2 tmp = vec2(-l.y, l.x);
vec2 tmp_poj = vec2(tmp.x * r, tmp.y / r);
vec2 l_poj = vec2(l.x * r, l.y / r);
vec2 p1 = l1p.xy + (tmp_poj * t1);
vec2 p2 = l1p.xy - (tmp_poj * t1);
vec2 p3 = l2p.xy + (tmp_poj * t2);
vec2 p4 = l2p.xy - (tmp_poj * t2);
gl_Position = vec4(p1.x * l1.w, p1.y * l1.w, l1.z, l1.w);
EmitVertex();
gl_Position = vec4(p2.x * l1.w, p2.y * l1.w, l1.z, l1.w);
EmitVertex();
gl_Position = vec4(p3.x * l2.w, p3.y * l2.w, l2.z, l2.w);
EmitVertex();
gl_Position = vec4(p4.x * l2.w, p4.y * l2.w, l2.z, l2.w);
EmitVertex();
EndPrimitive();
p1 = l1p.xy + (tmp_poj * t1);
p2 = l1p.xy - (tmp_poj * t1);
p3 = l1p.xy + (tmp_poj * t1) - (l_poj * t1) / 2.f;
p4 = l1p.xy - (tmp_poj * t1) - (l_poj * t1) / 2.f;
vec2 p5 = l1p.xy + (tmp_poj * t1) / 2.f - (l_poj * t1);
vec2 p6 = l1p.xy - (tmp_poj * t1) / 2.f - (l_poj * t1);
gl_Position = vec4(p1.x * l1.w, p1.y * l1.w, l1.z, 1 * l1.w);
EmitVertex();
gl_Position = vec4(p2.x * l1.w, p2.y * l1.w, l1.z, 1 * l1.w);
EmitVertex();
gl_Position = vec4(p3.x * l1.w, p3.y * l1.w, l1.z, 1 * l1.w);
EmitVertex();
gl_Position = vec4(p4.x * l1.w, p4.y * l1.w, l1.z, 1 * l1.w);
EmitVertex();
gl_Position = vec4(p5.x * l1.w, p5.y * l1.w, l1.z, 1 * l1.w);
EmitVertex();
gl_Position = vec4(p6.x * l1.w, p6.y * l1.w, l1.z, 1 * l1.w);
EmitVertex();
EndPrimitive();
p1 = l2p.xy + (tmp_poj * t2);
p2 = l2p.xy - (tmp_poj * t2);
p3 = l2p.xy + (tmp_poj * t2) + (l_poj * t2) / 2.f;
p4 = l2p.xy - (tmp_poj * t2) + (l_poj * t2) / 2.f;
p5 = l2p.xy + (tmp_poj * t2) / 2.f + (l_poj * t2);
p6 = l2p.xy - (tmp_poj * t2) / 2.f + (l_poj * t2);
gl_Position = vec4(p1.x * l2.w, p1.y * l2.w, l2.z, 1 * l2.w);
EmitVertex();
gl_Position = vec4(p2.x * l2.w, p2.y * l2.w, l2.z, 1 * l2.w);
EmitVertex();
gl_Position = vec4(p3.x * l2.w, p3.y * l2.w, l2.z, 1 * l2.w);
EmitVertex();
gl_Position = vec4(p4.x * l2.w, p4.y * l2.w, l2.z, 1 * l2.w);
EmitVertex();
gl_Position = vec4(p5.x * l2.w, p5.y * l2.w, l2.z, 1 * l2.w);
EmitVertex();
gl_Position = vec4(p6.x * l2.w, p6.y * l2.w, l2.z, 1 * l2.w);
EmitVertex();
EndPrimitive();
}

View file

@ -0,0 +1,16 @@
#version 330 core
layout(location = 0) in vec4 point;
out float thickness;
uniform mat4 MVP;
void main() {
thickness = point.w;
// gl_Position = MVP * vec4(point.xyz, 1);
vec4 vec = MVP * vec4(point.xyz, 1);
vec.z *= vec.w;
gl_Position = vec;
}