From 3c6c899dc8a597e9fce858efc0d86bb0bd4d491b Mon Sep 17 00:00:00 2001 From: RaphaelUmarov21 Date: Mon, 17 Mar 2025 18:35:23 +0100 Subject: [PATCH 1/5] Update example_5.cpp --- examples/basic_examples/example_5.cpp | 55 ++++++++++++++++++++++----- 1 file changed, 46 insertions(+), 9 deletions(-) diff --git a/examples/basic_examples/example_5.cpp b/examples/basic_examples/example_5.cpp index 5c9ebc2..9ae345a 100644 --- a/examples/basic_examples/example_5.cpp +++ b/examples/basic_examples/example_5.cpp @@ -1,11 +1,48 @@ -// Write your code HERE + + void main() { - uint x = gl_GlobalInvocationID.x; - uint y = gl_GlobalInvocationID.y; - uint p = x + y * WSX; - int dx = int(WSX)/2 - int(x); - int dy = int(WSY)/2 - int(y); - int r = int(64.0*sin(step/100.0)); - int d = int(dx*dx+dy*dy) ; - data_0[p] = 0xFF000000 - 600* (d + step) ; + float angle = step * 0.01; + + uint x = gl_GlobalInvocationID.x; + uint y = gl_GlobalInvocationID.y; + uint p = x + y * WSX; + + int cx = int(WSX) / 2; + int cy = int(WSY) / 2; + + int dx = int(x) - cx; + int dy = int(y) - cy; + + int trait1 = 450; + + float cosAngle = cos(angle); + float sinAngle = sin(angle); + + int planetX = int(cx + trait1 * cosAngle); + int planetY = int(cy + trait1 * sinAngle); + + int distTerre = (int(x) - cx) * (int(x) - cx) + (int(y) - cy) * (int(y) - cy); + int Terre = 250 * 250; + + int distTrait1 = (int(x) - cx) * (int(x) - cx) + (int(y) - cy) * (int(y) - cy); + + int distPlanete = (int(x) - planetX) * (int(x) - planetX) + (int(y) - planetY) * (int(y) - planetY); + int planetRadius = 50 * 50; + + int randomSeed = int(x * 37 + y * 89); + int noise = (randomSeed % 100) - 50; + + if (distTerre <= Terre) { + data_0[p] = 0xFF0000FF; + } + else if (distPlanete <= planetRadius) { + data_0[p] = 0xFFFFFF00; + } + else if (distTrait1 <= (trait1 * trait1) + 1000 && distTrait1 >= (trait1 * trait1) - 1000) { + data_0[p] = 0xFF808080; + } + else { + data_0[p] = 0xFF000000; // Fond noir (R = 0, G = 0, B = 0, A = 255) + } + } From d6c5519dd0896a593b8c2d5f64295edabb93101d Mon Sep 17 00:00:00 2001 From: RaphaelUmarov21 Date: Mon, 17 Mar 2025 18:41:14 +0100 Subject: [PATCH 2/5] V1 2 planetes en orbite --- examples/SolarleJcleS/systeme.cpp | 61 ++++++++++++++++++++++++++ examples/basic_examples/example_2.tscn | 2 +- examples/basic_examples/example_4.tscn | 2 +- examples/basic_examples/example_5.cpp | 55 +++++++++++++++++++---- examples/basic_examples/example_5.tscn | 24 +++------- examples/example_1.tscn | 3 +- project.godot | 2 +- 7 files changed, 118 insertions(+), 31 deletions(-) create mode 100644 examples/SolarleJcleS/systeme.cpp diff --git a/examples/SolarleJcleS/systeme.cpp b/examples/SolarleJcleS/systeme.cpp new file mode 100644 index 0000000..b60a01f --- /dev/null +++ b/examples/SolarleJcleS/systeme.cpp @@ -0,0 +1,61 @@ +// Write your code HERE +void main() { + float angle = step * 0.01; + + float angle1 = step * 0.01; + + float angle2 = step * 0.01; + + float angle3 = step * 0.01; + + + uint x = gl_GlobalInvocationID.x; + uint y = gl_GlobalInvocationID.y; + uint p = x + y * WSX; + + int cx = int(WSX) / 2; + int cy = int(WSY) / 2; + + int dx = int(x) - cx; + int dy = int(y) - cy; + + // Calcul de l'angle de rotation (par exemple, utiliser le temps ou un compteur pour l'animation) + + float cosAngle = cos(angle); + float sinAngle = sin(angle); + + int newDx = int(dx * cosAngle - dy * sinAngle); + int newDy = int(dx * sinAngle + dy * cosAngle); + + int newX = newDx + cx; + int newY = newDy + cy; + + // Calcul de la distance entre ce pixel et le centre de l'image + int dist = (newX - cx) * (newX - cx) + (newY - cy) * (newY - cy); + + // Rayon du cercle (150 pixels de rayon) + int radius = 250 * 250; + + int trait1 = 450 * 450; + + int planetRadius = 50; + int planetX = int(cx + 450 * cosAngle); + int planetY = int(cy + 450 * sinAngle); + + int dist2 = (x - planetX) * (x - planetX) + (y - planetY) * (y - planetY); + + int radiusPlanet = planetRadius * planetRadius; + + int dist2 = (x - cx) * (x - cx) + (y - cy) * (y - cy); + int radiusEarth = 250 * 250; // Rayon de la Terre + + if (dist2 <= radiusEarth) { + data_0[p] = 0xFF0000FF; + } + else if (dist <= radiusPlanet) { + data_0[p] = 0xFFFFFF00; + } + else { + data_0[p] = 0xFF000000; // Fond noir (R = 0, G = 0, B = 0, A = 255) + } +} \ No newline at end of file diff --git a/examples/basic_examples/example_2.tscn b/examples/basic_examples/example_2.tscn index a843389..766e825 100644 --- a/examples/basic_examples/example_2.tscn +++ b/examples/basic_examples/example_2.tscn @@ -1,6 +1,6 @@ [gd_scene load_steps=3 format=3 uid="uid://cotswmubn7uvm"] -[ext_resource type="Script" uid="uid://c8esqdv0y26yp" path="res://addons/compute_shader_studio/compute_shader_studio_2d.gd" id="1_2cs40"] +[ext_resource type="Script" path="res://addons/compute_shader_studio/compute_shader_studio_2d.gd" id="1_2cs40"] [ext_resource type="Texture2D" uid="uid://demftcowdd5c6" path="res://examples/icon.svg" id="2_j6qu8"] [node name="Example2" type="Node2D"] diff --git a/examples/basic_examples/example_4.tscn b/examples/basic_examples/example_4.tscn index 1d7e26f..c777972 100644 --- a/examples/basic_examples/example_4.tscn +++ b/examples/basic_examples/example_4.tscn @@ -1,6 +1,6 @@ [gd_scene load_steps=3 format=3 uid="uid://b2ip5eftk3aij"] -[ext_resource type="Script" uid="uid://c8esqdv0y26yp" path="res://addons/compute_shader_studio/compute_shader_studio_2d.gd" id="1_ke3fj"] +[ext_resource type="Script" path="res://addons/compute_shader_studio/compute_shader_studio_2d.gd" id="1_ke3fj"] [ext_resource type="Texture2D" uid="uid://2behgeplwycn" path="res://examples/grid_512x512.png" id="2_flqlh"] [node name="CompShadStudioEx4" type="Node2D"] diff --git a/examples/basic_examples/example_5.cpp b/examples/basic_examples/example_5.cpp index 5c9ebc2..9ae345a 100644 --- a/examples/basic_examples/example_5.cpp +++ b/examples/basic_examples/example_5.cpp @@ -1,11 +1,48 @@ -// Write your code HERE + + void main() { - uint x = gl_GlobalInvocationID.x; - uint y = gl_GlobalInvocationID.y; - uint p = x + y * WSX; - int dx = int(WSX)/2 - int(x); - int dy = int(WSY)/2 - int(y); - int r = int(64.0*sin(step/100.0)); - int d = int(dx*dx+dy*dy) ; - data_0[p] = 0xFF000000 - 600* (d + step) ; + float angle = step * 0.01; + + uint x = gl_GlobalInvocationID.x; + uint y = gl_GlobalInvocationID.y; + uint p = x + y * WSX; + + int cx = int(WSX) / 2; + int cy = int(WSY) / 2; + + int dx = int(x) - cx; + int dy = int(y) - cy; + + int trait1 = 450; + + float cosAngle = cos(angle); + float sinAngle = sin(angle); + + int planetX = int(cx + trait1 * cosAngle); + int planetY = int(cy + trait1 * sinAngle); + + int distTerre = (int(x) - cx) * (int(x) - cx) + (int(y) - cy) * (int(y) - cy); + int Terre = 250 * 250; + + int distTrait1 = (int(x) - cx) * (int(x) - cx) + (int(y) - cy) * (int(y) - cy); + + int distPlanete = (int(x) - planetX) * (int(x) - planetX) + (int(y) - planetY) * (int(y) - planetY); + int planetRadius = 50 * 50; + + int randomSeed = int(x * 37 + y * 89); + int noise = (randomSeed % 100) - 50; + + if (distTerre <= Terre) { + data_0[p] = 0xFF0000FF; + } + else if (distPlanete <= planetRadius) { + data_0[p] = 0xFFFFFF00; + } + else if (distTrait1 <= (trait1 * trait1) + 1000 && distTrait1 >= (trait1 * trait1) - 1000) { + data_0[p] = 0xFF808080; + } + else { + data_0[p] = 0xFF000000; // Fond noir (R = 0, G = 0, B = 0, A = 255) + } + } diff --git a/examples/basic_examples/example_5.tscn b/examples/basic_examples/example_5.tscn index b54d2e0..95fc6c6 100644 --- a/examples/basic_examples/example_5.tscn +++ b/examples/basic_examples/example_5.tscn @@ -1,6 +1,6 @@ [gd_scene load_steps=4 format=3 uid="uid://cets11mlsd8hb"] -[ext_resource type="Script" uid="uid://c8esqdv0y26yp" path="res://addons/compute_shader_studio/compute_shader_studio_2d.gd" id="1_cogap"] +[ext_resource type="Script" path="res://addons/compute_shader_studio/compute_shader_studio_2d.gd" id="1_cogap"] [sub_resource type="FastNoiseLite" id="FastNoiseLite_pm7bb"] @@ -13,26 +13,14 @@ noise = SubResource("FastNoiseLite_pm7bb") [node name="ComputeShaderStudio2D2" type="Node" parent="." node_paths=PackedStringArray("data")] script = ExtResource("1_cogap") -WSX = 256 +WSX = 1920 +WSY = 1080 glsl_file = "res://examples/basic_examples/example_5.cpp" GLSL_code = "" data = [NodePath("../TextureRect")] -[node name="Label" type="Label" parent="."] -offset_left = 278.0 -offset_top = -1.0 -offset_right = 679.0 -offset_bottom = 101.0 -scale = Vector2(1.72, 1.72) -text = "Compute Shader Studio -Example 5: using an external GLSL file -and a TextureRect" -horizontal_alignment = 1 -vertical_alignment = 1 - [node name="TextureRect" type="TextureRect" parent="."] -offset_left = 278.0 -offset_top = 192.0 -offset_right = 975.0 -offset_bottom = 629.0 +offset_right = 256.0 +offset_bottom = 128.0 texture = SubResource("NoiseTexture2D_nxi5j") +metadata/_edit_use_anchors_ = true diff --git a/examples/example_1.tscn b/examples/example_1.tscn index 4d271f5..e7aa584 100644 --- a/examples/example_1.tscn +++ b/examples/example_1.tscn @@ -1,6 +1,6 @@ [gd_scene load_steps=5 format=3 uid="uid://ddr6qtwy1pesd"] -[ext_resource type="Script" uid="uid://c8esqdv0y26yp" path="res://addons/compute_shader_studio/compute_shader_studio_2d.gd" id="1_6846p"] +[ext_resource type="Script" path="res://addons/compute_shader_studio/compute_shader_studio_2d.gd" id="1_6846p"] [ext_resource type="Texture2D" uid="uid://demftcowdd5c6" path="res://examples/icon.svg" id="2_s3fct"] [sub_resource type="FastNoiseLite" id="FastNoiseLite_dmk8h"] @@ -14,6 +14,7 @@ noise = SubResource("FastNoiseLite_dmk8h") [node name="ComputeShaderStudio2D2" type="Node" parent="." node_paths=PackedStringArray("data")] script = ExtResource("1_6846p") +glsl_file = "res://examples/SolarleJcleS/systeme.cpp" GLSL_code = " // Usable variables // **************** diff --git a/project.godot b/project.godot index 1617345..0436dd7 100644 --- a/project.godot +++ b/project.godot @@ -12,7 +12,7 @@ config_version=5 config/name="compute_shader_studio" run/main_scene="res://examples/example_1.tscn" -config/features=PackedStringArray("4.4", "Forward Plus") +config/features=PackedStringArray("4.2", "Forward Plus") config/icon="res://addons/compute_shader_studio/icon.png" [editor_plugins] From d2bfbec3a83cb8f087983c434f40d4f71d7633b2 Mon Sep 17 00:00:00 2001 From: RaphaelUmarov21 Date: Mon, 17 Mar 2025 18:45:23 +0100 Subject: [PATCH 3/5] Update example_5.cpp --- examples/basic_examples/example_5.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/basic_examples/example_5.cpp b/examples/basic_examples/example_5.cpp index 9ae345a..716017b 100644 --- a/examples/basic_examples/example_5.cpp +++ b/examples/basic_examples/example_5.cpp @@ -2,7 +2,7 @@ void main() { float angle = step * 0.01; - + uint x = gl_GlobalInvocationID.x; uint y = gl_GlobalInvocationID.y; uint p = x + y * WSX; From 0c0b710e2f9b6eebb2c83cbcb64f736a71b8e5a4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Am=C3=A9lien?= Date: Tue, 18 Mar 2025 08:15:50 +0100 Subject: [PATCH 4/5] Update example_5.cpp Version finale du projet + Commentaires --- examples/basic_examples/example_5.cpp | 90 ++++++++++++++++++--------- 1 file changed, 62 insertions(+), 28 deletions(-) diff --git a/examples/basic_examples/example_5.cpp b/examples/basic_examples/example_5.cpp index 716017b..0165227 100644 --- a/examples/basic_examples/example_5.cpp +++ b/examples/basic_examples/example_5.cpp @@ -1,48 +1,82 @@ - +//Notes de jamais mettre d'accent +//-------------------------------------------------- +//Ajout possibles : +//------Etoiles random en blancs +//------Apparition des planetes non lineaires ou random +//------Esthetiques des planetes +//-------------------------------------------------- void main() { - float angle = step * 0.01; + //Coordonnees pour la Suite ----------------------------------------------------------------------------------- + uint x = gl_GlobalInvocationID.x; uint y = gl_GlobalInvocationID.y; uint p = x + y * WSX; int cx = int(WSX) / 2; - int cy = int(WSY) / 2; + int cy = int(WSY) / 2 - 60; //centrage du systeme int dx = int(x) - cx; int dy = int(y) - cy; + //----------------------------------------------------------------------------------------------------------- - int trait1 = 450; + //Valeur pour Soleil ----------------------------------------------------------------------------------------- - float cosAngle = cos(angle); - float sinAngle = sin(angle); + int distSoleil = dx * dx + dy * dy; + int Soleil = 50 * 50; - int planetX = int(cx + trait1 * cosAngle); - int planetY = int(cy + trait1 * sinAngle); + //Tableau des planetes -------------------------------------------------------------------------------------- - int distTerre = (int(x) - cx) * (int(x) - cx) + (int(y) - cy) * (int(y) - cy); - int Terre = 250 * 250; + struct Planete { + float vitesse; // par rapport a step (vitesse * step) + int distance; //par rapport au centre + int rayon; // taille du cercle + int couleur; + }; - int distTrait1 = (int(x) - cx) * (int(x) - cx) + (int(y) - cy) * (int(y) - cy); + Planete planetes[8] = { + { 0.01, 80, 15, 0xFFFFFF00 }, // Mercure + { 0.008, 120, 30, 0xFFFFA500 }, // Venus + { 0.005, 150, 30, 0xFF0000FF }, // Terre + { 0.003, 190, 20, 0xFFFF0000 }, // Mars + { 0.0009, 250, 60, 0xFF964B00 }, // Jupiter + { 0.0005, 300, 55, 0xFFD2B48C }, // Saturne + { 0.0003, 380, 50, 0xFF00FFFF }, // Uranus + { 0.0002, 450, 45, 0xFF000080 } // Neptune + }; + + // Affichage et couleur + if (distSoleil <= Soleil) { + data_0[p] = 0xFF0000FF; //rouge + } else { + for (int i = 0; i < 8; i++) { //pour chaque planete de planetes - int distPlanete = (int(x) - planetX) * (int(x) - planetX) + (int(y) - planetY) * (int(y) - planetY); - int planetRadius = 50 * 50; + //vitesse de la planete --------------------------------------------------- + float angle = step * planetes[i].vitesse; + float cosAngle = cos(angle); + float sinAngle = sin(angle); + //------------------------------------------------------------------------- - int randomSeed = int(x * 37 + y * 89); - int noise = (randomSeed % 100) - 50; + //position de la planete par rapport au soleil ---------------------------- + int planetX = int(cx + planetes[i].distance * cosAngle); + int planetY = int(cy + planetes[i].distance * sinAngle); + //------------------------------------------------------------------------- - if (distTerre <= Terre) { - data_0[p] = 0xFF0000FF; - } - else if (distPlanete <= planetRadius) { - data_0[p] = 0xFFFFFF00; - } - else if (distTrait1 <= (trait1 * trait1) + 1000 && distTrait1 >= (trait1 * trait1) - 1000) { - data_0[p] = 0xFF808080; - } - else { - data_0[p] = 0xFF000000; // Fond noir (R = 0, G = 0, B = 0, A = 255) + int distPlanete = (int(x) - planetX) * (int(x) - planetX) + (int(y) - planetY) * (int(y) - planetY); + int distTrait = dx * dx + dy * dy; + + //Conditions pour colorer le bonne endroit de la planete-------------------- + if (distPlanete <= planetes[i].rayon * planetes[i].rayon) { + data_0[p] = planetes[i].couleur; //coloration de la planete + return; + } else if (distTrait <= (planetes[i].distance * planetes[i].distance) + 1000 && distTrait >= (planetes[i].distance * planetes[i].distance) - 1000) { + data_0[p] = 0xFF808080; //coloration du trait de l'orbite + return; + } + //------------------------------------------------------------------------- + + } + data_0[p] = 0xFF000000; //sinon coloris en noir } - -} +} \ No newline at end of file From 80047ac818dc5d5e46dc711a3c57007f8ade7a26 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Am=C3=A9lien?= Date: Tue, 18 Mar 2025 08:35:48 +0100 Subject: [PATCH 5/5] Changement couleur --- examples/basic_examples/example_5.cpp | 24 +++++++++++++++--------- project.godot | 2 +- 2 files changed, 16 insertions(+), 10 deletions(-) diff --git a/examples/basic_examples/example_5.cpp b/examples/basic_examples/example_5.cpp index 0165227..b29c4e2 100644 --- a/examples/basic_examples/example_5.cpp +++ b/examples/basic_examples/example_5.cpp @@ -36,19 +36,25 @@ void main() { }; Planete planetes[8] = { - { 0.01, 80, 15, 0xFFFFFF00 }, // Mercure - { 0.008, 120, 30, 0xFFFFA500 }, // Venus - { 0.005, 150, 30, 0xFF0000FF }, // Terre - { 0.003, 190, 20, 0xFFFF0000 }, // Mars - { 0.0009, 250, 60, 0xFF964B00 }, // Jupiter - { 0.0005, 300, 55, 0xFFD2B48C }, // Saturne - { 0.0003, 380, 50, 0xFF00FFFF }, // Uranus - { 0.0002, 450, 45, 0xFF000080 } // Neptune + { 0.01, 80, 15, 0xFF0000FF }, // Mercure + { 0.008, 120, 30, 0xFF5500FF }, // Venus + { 0.005, 150, 30, 0xFF55FF00 }, // Terre + { 0.003, 200, 20, 0xFF0055FF }, // Mars + { 0.0009, 250, 55, 0xFF00DDFF }, // Jupiter + { 0.0005, 300, 40, 0xFF00EEFF }, // Saturne + { 0.0003, 450, 50, 0xFFF5F5F5 }, // Uranus + { 0.0002, 550, 45, 0xFFFF1100 } // Neptune }; // Affichage et couleur if (distSoleil <= Soleil) { - data_0[p] = 0xFF0000FF; //rouge + data_0[p] = 0xFF0022FF; //rouge + if(distSoleil <= Soleil - 200){ + data_0[p] = 0xFF00FFFF; //rouge + } + if(distSoleil <= Soleil - 1500){ + data_0[p] = 0xFFFFFFFF; //rouge + } } else { for (int i = 0; i < 8; i++) { //pour chaque planete de planetes diff --git a/project.godot b/project.godot index 0436dd7..5a6cc33 100644 --- a/project.godot +++ b/project.godot @@ -11,7 +11,7 @@ config_version=5 [application] config/name="compute_shader_studio" -run/main_scene="res://examples/example_1.tscn" +run/main_scene="res://examples/basic_examples/example_5.tscn" config/features=PackedStringArray("4.2", "Forward Plus") config/icon="res://addons/compute_shader_studio/icon.png"