From facd2d0e847076b3102b35987bd9f55d743655b9 Mon Sep 17 00:00:00 2001 From: bk_office <2680813175@qq.com> Date: Sat, 25 Apr 2026 14:41:43 +0800 Subject: [PATCH] =?UTF-8?q?=E5=86=8D=E8=A7=81=E4=BA=86=EF=BC=8C=E6=89=80?= =?UTF-8?q?=E6=9C=89=E7=9A=84skia?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- konabot/plugins/marchtoy/gl_render.py | 2 +- konabot/plugins/marchtoy/shaders/frag.glsl | 5 +- .../plugins/marchtoy/shaders/raymarch.sksl | 73 ------------------- konabot/plugins/marchtoy/shaders/vert.glsl | 1 - 4 files changed, 3 insertions(+), 78 deletions(-) delete mode 100644 konabot/plugins/marchtoy/shaders/raymarch.sksl diff --git a/konabot/plugins/marchtoy/gl_render.py b/konabot/plugins/marchtoy/gl_render.py index d1539e4..813dbe2 100644 --- a/konabot/plugins/marchtoy/gl_render.py +++ b/konabot/plugins/marchtoy/gl_render.py @@ -29,7 +29,7 @@ def render(vs: str, fs: str, res: tuple[int, int]): vao.render(moderngl.TRIANGLES) Image.frombytes('RGB', fbo.size, fbo.read(), 'raw', 'RGB', 0, -1).show() -fs = Scene("cube camera.pos(1).lookat(0)").compile() +fs = Scene("cube(0.5).pos(1) camera.pos(1).lookat(0)").compile() PATH = pathlib.Path(__file__).parent / "shaders" with (PATH / "vert.glsl").open(encoding='utf-8') as f: vs = f.read() diff --git a/konabot/plugins/marchtoy/shaders/frag.glsl b/konabot/plugins/marchtoy/shaders/frag.glsl index c0f4412..4bc65e8 100644 --- a/konabot/plugins/marchtoy/shaders/frag.glsl +++ b/konabot/plugins/marchtoy/shaders/frag.glsl @@ -1,5 +1,4 @@ #version 330 -uniform vec2 u_resolution; // compatibility #define float4x4 mat4x4 #define float4 vec4 @@ -9,7 +8,7 @@ uniform vec2 u_resolution; const float EPS = 0.001; const int MAX_ITER = 64; -in vec2 fragCoord; +uniform vec2 u_resolution; out vec4 fragColor; struct sdQuery { @@ -71,7 +70,7 @@ vec4 march(vec3 p, vec3 r) { } void main() { - vec2 uv = -2. * (fragCoord / u_resolution - .5) * vec2(u_resolution.x / u_resolution.y, 1.); + vec2 uv = 2. * (gl_FragCoord.xy / u_resolution - .5) * vec2(u_resolution.x / u_resolution.y, 1.); vec3 c_p = vec3(); vec3 c_z = normalize(vec3()); vec3 world_up = abs(c_z.y) > 0.999 ? vec3(0., 0., 1.) : vec3(0., 1., 0.); diff --git a/konabot/plugins/marchtoy/shaders/raymarch.sksl b/konabot/plugins/marchtoy/shaders/raymarch.sksl deleted file mode 100644 index ec85341..0000000 --- a/konabot/plugins/marchtoy/shaders/raymarch.sksl +++ /dev/null @@ -1,73 +0,0 @@ -uniform float2 u_resolution; - -const float EPS = 0.001; -const int MAX_ITER = 64; -struct sdQuery { - float value; - int obj_id; -}; - -float sdCube(float3 p, float3 b) { - p = abs(p) - b; - return length(max(p, 0.0)) + min(max(p.x, max(p.y, p.z)), 0.0); -} - -float sdSphere(float3 p, float r) { - return length(p) - r; -} - -sdQuery sd(float3 p) { - sdQuery qry; - qry.value = 100000000.0; - qry.obj_id = -1; - - return qry; -} - -float3 nrm(float3 p) { - float2 d = float2(EPS, 0.0); - return normalize(float3( - sd(p + d.xyy).value - sd(p - d.xyy).value, - sd(p + d.yxy).value - sd(p - d.yxy).value, - sd(p + d.yyx).value - sd(p - d.yyx).value - )); -} - -float4 materialColor(int obj_id) { - - return float4(1.0); -} - -float4 color(float3 p, int obj_id) { - float3 normal = nrm(p); - float3 light_dir = normalize(float3(0.5, 0.8, -0.6)); - float light = 0.2 + 0.8 * max(dot(normal, light_dir), 0.0); - float4 base = materialColor(obj_id); - return float4(base.rgb * light, base.a); -} - -float4 march(float3 p, float3 r) { - sdQuery qry; - float4 col = float4(0.0); - for(int i = 0; i < MAX_ITER; ++i) { - qry = sd(p); - if(qry.value < EPS){ - col = color(p, qry.obj_id); - break; - } - p += qry.value * r; - } - return col; -} - -half4 main(float2 fragCoord) { - float2 uv = -2. * (fragCoord / u_resolution - .5) * float2(u_resolution.x / u_resolution.y, 1.); - float3 c_p = float3(); - float3 c_z = normalize(float3()); - float3 world_up = abs(c_z.y) > 0.999 ? float3(0., 0., 1.) : float3(0., 1., 0.); - float3 c_x = normalize(cross(c_z, world_up)); - float3 c_y = normalize(cross(c_x, c_z)); - float3x3 view = float3x3(c_x, c_y, c_z); - float3 r = normalize(float3(uv, )); - return half4(march(c_p, view * r)); -} diff --git a/konabot/plugins/marchtoy/shaders/vert.glsl b/konabot/plugins/marchtoy/shaders/vert.glsl index 78df917..b70527e 100644 --- a/konabot/plugins/marchtoy/shaders/vert.glsl +++ b/konabot/plugins/marchtoy/shaders/vert.glsl @@ -1,6 +1,5 @@ #version 330 in vec2 in_position; -out vec2 fragCoord; void main() { gl_Position = vec4(in_position, 0.0, 1.0);