Sketch ini
This commit is contained in:
parent
8866290d29
commit
f8c38a8a37
16 changed files with 2510 additions and 0 deletions
BIN
Sketch3D/rsc/Font.ttf
Normal file
BIN
Sketch3D/rsc/Font.ttf
Normal file
Binary file not shown.
15
Sketch3D/rsc/shaders/Texture.frag
Normal file
15
Sketch3D/rsc/shaders/Texture.frag
Normal 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;
|
||||
}
|
||||
12
Sketch3D/rsc/shaders/Texture.vert
Normal file
12
Sketch3D/rsc/shaders/Texture.vert
Normal 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;
|
||||
}
|
||||
28
Sketch3D/rsc/shaders/stroke.frag
Normal file
28
Sketch3D/rsc/shaders/stroke.frag
Normal 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);
|
||||
}
|
||||
170
Sketch3D/rsc/shaders/stroke.geom
Normal file
170
Sketch3D/rsc/shaders/stroke.geom
Normal 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();
|
||||
}
|
||||
16
Sketch3D/rsc/shaders/stroke.vert
Normal file
16
Sketch3D/rsc/shaders/stroke.vert
Normal 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;
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue