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..b29c4e2 100644 --- a/examples/basic_examples/example_5.cpp +++ b/examples/basic_examples/example_5.cpp @@ -1,11 +1,88 @@ -// Write your code HERE +//Notes de jamais mettre d'accent +//-------------------------------------------------- +//Ajout possibles : +//------Etoiles random en blancs +//------Apparition des planetes non lineaires ou random +//------Esthetiques des planetes +//-------------------------------------------------- + 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) ; -} + + //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 - 60; //centrage du systeme + + int dx = int(x) - cx; + int dy = int(y) - cy; + //----------------------------------------------------------------------------------------------------------- + + //Valeur pour Soleil ----------------------------------------------------------------------------------------- + + int distSoleil = dx * dx + dy * dy; + int Soleil = 50 * 50; + + //Tableau des planetes -------------------------------------------------------------------------------------- + + struct Planete { + float vitesse; // par rapport a step (vitesse * step) + int distance; //par rapport au centre + int rayon; // taille du cercle + int couleur; + }; + + Planete planetes[8] = { + { 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] = 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 + + //vitesse de la planete --------------------------------------------------- + float angle = step * planetes[i].vitesse; + float cosAngle = cos(angle); + float sinAngle = sin(angle); + //------------------------------------------------------------------------- + + //position de la planete par rapport au soleil ---------------------------- + int planetX = int(cx + planetes[i].distance * cosAngle); + int planetY = int(cy + planetes[i].distance * sinAngle); + //------------------------------------------------------------------------- + + 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 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..5a6cc33 100644 --- a/project.godot +++ b/project.godot @@ -11,8 +11,8 @@ config_version=5 [application] config/name="compute_shader_studio" -run/main_scene="res://examples/example_1.tscn" -config/features=PackedStringArray("4.4", "Forward Plus") +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" [editor_plugins]